我正在使用 zsh shell 并且我正在尝试更改我的 mac 中的默认 python,它目前是 python2。
我得到以下信息:
? alias python = 'python3'
zsh: bad assignment
Run Code Online (Sandbox Code Playgroud)
为什么会发生?
我最近将 macOS 更新到了新的 Catalina 版本,并按照建议从 bash 切换到了 zsh。问题是在我的工作流程中我们做了一些需要正则表达式的文件操作,我不知道如何让它与 zsh 一起工作。
这是我的两个正则表达式:
ls | grep ^[0-9].*.chunk.js$
ls | grep ^main.*.chunk.js$
Run Code Online (Sandbox Code Playgroud)
它们应该匹配以下文件:main.d9a85e98.chunk.js和2.c2cbac0f.chunk.js
任何想法或资源?
谢谢!
我需要一种.zshrc在每次执行命令时自动获取源的方法。PROMPT每次执行命令时都需要更新,以便在提示中显示相关信息。
我使用Watson cli来跟踪时间。在我之前的 bash 设置中,我在提示符 ( $PS1)前面加上了一个符号,指示计时器是否正在运行(红色/绿色)。我用 Oh My Zsh 模仿了这个功能,如下(在主题文件中):
WATSON_DIR="$HOME/Library/Application Support/watson"
watson_status() {
local txtred="${fg_bold[red]}"
local txtgrn="${fg_bold[green]}"
local txtrst="${reset_color}"
# Started
local status_color="$txtgrn"
# Stopped
if [[ $(cat "$WATSON_DIR/state") == '{}' ]]; then
status_color="$txtred"
fi
echo -e "$status_color""?""$txtrst"
}
PROMPT="??? %{$(watson_status) $fg_bold[green]%}%~%{$reset_color%}$(git_prompt_info) ? %{$FG[130]%}%*%{$reset_color%}
??? $ "
Run Code Online (Sandbox Code Playgroud)
该图标将指示 .zshrc 执行时状态的颜色。例如,如果计时器正在运行并且图标正确指示为绿色,则停止计时器不会导致图标变为红色。为了看到图标改变颜色,我必须获取 .zshrc。
这表示watson_status()每次执行命令时都需要运行该函数,以给出命令执行时的最新状态
最近我想知道在 Bash 中获取当前正在运行的脚本/文件的路径的最佳方法。
我找到了很多答案。特别是其中之一是:
"${BASH_SOURCE:-${(%):-%x}}"
Run Code Online (Sandbox Code Playgroud)
我记得当时决定这是满足我需求的最佳解决方案。现在我正在努力记住为什么。我知道一些片段的意思,但不是全部。即使有了我所知道的,我也不能把它们放在一起来理解它。有用。但为什么?
我为在网络上的任何地方找到这个特定代码所做的一切努力(包括搜索它的一部分)都失败了,所以我无法找到我最初找到它的地方。
谁能告诉我每件作品的含义(甚至可以说明为什么我可能会选择这个而不是其他答案)?
谢谢!
第二天更新:@rici 的精彩回答(和评论)解释了一切,包括我选择它的原因。
似乎我选择了整个表达式来使我正在使用它的源文件能够在 bash 和 zsh 中可靠地使用 - 这是一个目标。使用双重替换,整个表达式在任一 shell 中得到相同的答案。
解释了为什么我无法理解(或通过谷歌找到任何合理的)bash 中的 ${(%):-%x} 部分,因为......好吧......它在 bash 中没有多大意义,哈哈,因为它是为 zsh 设计的。出于这个原因,我现在为此添加了一个 zsh 标签。
一个小时后的第二次更新,以防这对任何人有帮助:我现在已经找到了:
...这是我${(%):-%x}最初从哪里得到的,最值得注意的是这个特定的答案:
aliases由于处理一些拼写错误,我有多个别名为一个公共别名。请注意,我用which的zsh壳type中bash。
例如:
alias netlab="ssh user@IP_ADDRESS"
alias n=netlab
alias ne=netlab
alias net=netlab
alias nn=netlab
Run Code Online (Sandbox Code Playgroud)
当我尝试获取别名的类型时,我得到以下信息:
$ which -sa n # in ZSH-shell
n: aliased to netlab
$ type n # in BASH-shell
n is an alias for netlab
Run Code Online (Sandbox Code Playgroud)
既然netlab也有别名,我也能得到它吗?所以基本上,我想which program递归应用。
我想要的示例输出:
$ type n # in BASH-shell
n: aliased to netlab
netlab: aliased to ssh user@IP_ADDRESS
Run Code Online (Sandbox Code Playgroud)
或者只是返回其最新的别名:
$ type n
n: aliased to ssh user@IP_ADDRESS
Run Code Online (Sandbox Code Playgroud) 我将我的 shell 更新为 zsh,当我输入 flutter --version 时,我得到了这个:
'''xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools),
missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
Failed to find the latest git commit date: VersionCheckError: Command exited
with code 1: git -c log.showSignature=false log -n 1 --pretty=format:%ad
--date=iso
Standard out:
Standard error: xcrun: error: invalid active developer path
(/Library/Developer/CommandLineTools), missing xcrun at:
/Library/Developer/CommandLineTools/usr/bin/xcrun
Returning 1970-01-01 01:00:00.000 instead.
Flutter 0.0.0-unknown • channel unknown • unknown source
Framework • revision () • 1970-01-01 01:00:00.000
Engine • revision b8752bbfff
Tools • …Run Code Online (Sandbox Code Playgroud) 完全被这种行为弄糊涂了。
env不显示变量,而是echo显示它。
我经常使用 .env 文件导入测试,env | grep VAR但不知何故,它在我获取它后没有立即显示。这让我思考。
这是我用来解决问题的步骤。
$ cat >.env
TARXAN=wat
^D
$ . .env
$ echo $TARXAN
wat
$ env | grep TARXAN
$
Run Code Online (Sandbox Code Playgroud)
我有 oh-my-zsh 的 zsh。没有启用任何 dotenv 插件。将不胜感激任何帮助。我在 kubuntu 20.04。
我还在 xterm 中测试了整个设置。相同的结果。
每次我的 shell 获取文件时,我都试图记录。我正在使用 zsh,所以我进入了 zshenv 并添加了这个功能。
source() {
echo "sourcing $1"
command source $1
}
Run Code Online (Sandbox Code Playgroud)
这个想法是每次“源 [文件]”出现在我的一个点文件中并被执行时,它应该先将操作打印到终端,然后再实际获取文件。
相反,我收到了一些这样的错误
sourcing /Users/js/.cargo/env
source:2: command not found: source
sourcing /Users/js/.sources/postgres-env.sh
source:2: command not found: source
sourcing /Users/js/.oh-my-zsh/oh-my-zsh.sh
source:2: command not found: source
sourcing /Users/js/.iterm2_shell_integration.zsh
source:2: command not found: source
Run Code Online (Sandbox Code Playgroud)
在这里使用带有 zsh 的 shell 'command' 选项来调用 source 的正确方法是什么?
我试图只打印只有 1 个字符的行数。
我有一个 20 万行的文件,其中一些行只有一个字符(任何类型的字符)
由于我没有经验,我在谷歌上搜索了很多并抓取了文档,并从不同来源提出了这个混合解决方案:
awk -F^\w$ '{print NF-1}' myfile.log
Run Code Online (Sandbox Code Playgroud)
我原以为会过滤带有单个字符的行,这似乎有效
^\w$
Run Code Online (Sandbox Code Playgroud)
我在 home/files/file.txt 中有文件
其内容混合了字母和数字
SDA212
123DD2
31dD
Run Code Online (Sandbox Code Playgroud)
我想将文件复制到其他目录,同时用 X 字母替换数值?我有什么办法可以做到这一点?