Zsh 别名不起作用,但粘贴到终端时命令确实起作用
Zsh alias not working, but command does work when pasted in terminal
我的 .zshrc
文件中有一个别名,名为 "housekeeping",如下所示:
alias housekeeping="git fetch -p && git branch -vv | grep ': gone]' | awk '{print }' | xargs git branch -d"
当我 运行 这个命令时,出于某种原因,我得到以下输出:
error: The branch '12795-add-ship-info-to-FAQ' is not fully merged.
If you are sure you want to delete it, run 'git branch -D 12795-add-ship-info-to-FAQ'.
error: branch '97167bb3f' not found.
error: branch '[origin/12795-add-ship-info-to-FAQ:' not found.
error: branch 'gone]' not found.
error: branch 'Edits' not found.
error: branch 'to' not found.
error: branch 'text' not found.
它似乎传递了错误的参数。
然而,当我直接从终端 运行 完全相同的命令时,我确实得到了想要的结果。
我做错了什么?
问题是在你的别名的双引号内,</code> 指的是你的 shell 当前的第一个位置参数。它可能没有设置,所以你的别名等同于</p>
<pre><code>alias housekeeping="... | awk '{print }' | xargs ..."
after </code> 扩展为空字符串。结果,<code>grep
的整个输出,而不仅仅是分支名称,被馈送到 xargs
,它将 any 空格,而不仅仅是换行符,作为分隔符两个参数。
您需要转义美元符号 (awk '{print $1}'
) 以确保 awk
获得正确的脚本,或者更好的是,使用 函数 而不是别名以避免额外的引号层。
housekeeping () {
git fetch -p && git branch -vv | awk '/: gone]/ {print }' | xargs git branch -d
}
请注意,我已将对 grep
的调用替换为 awk
脚本中的模式。
我的 .zshrc
文件中有一个别名,名为 "housekeeping",如下所示:
alias housekeeping="git fetch -p && git branch -vv | grep ': gone]' | awk '{print }' | xargs git branch -d"
当我 运行 这个命令时,出于某种原因,我得到以下输出:
error: The branch '12795-add-ship-info-to-FAQ' is not fully merged.
If you are sure you want to delete it, run 'git branch -D 12795-add-ship-info-to-FAQ'.
error: branch '97167bb3f' not found.
error: branch '[origin/12795-add-ship-info-to-FAQ:' not found.
error: branch 'gone]' not found.
error: branch 'Edits' not found.
error: branch 'to' not found.
error: branch 'text' not found.
它似乎传递了错误的参数。
然而,当我直接从终端 运行 完全相同的命令时,我确实得到了想要的结果。
我做错了什么?
问题是在你的别名的双引号内,</code> 指的是你的 shell 当前的第一个位置参数。它可能没有设置,所以你的别名等同于</p>
<pre><code>alias housekeeping="... | awk '{print }' | xargs ..."
after </code> 扩展为空字符串。结果,<code>grep
的整个输出,而不仅仅是分支名称,被馈送到 xargs
,它将 any 空格,而不仅仅是换行符,作为分隔符两个参数。
您需要转义美元符号 (awk '{print $1}'
) 以确保 awk
获得正确的脚本,或者更好的是,使用 函数 而不是别名以避免额外的引号层。
housekeeping () {
git fetch -p && git branch -vv | awk '/: gone]/ {print }' | xargs git branch -d
}
请注意,我已将对 grep
的调用替换为 awk
脚本中的模式。