開啟新終端機視窗時 ZSH 別名拋出錯誤

開啟新終端機視窗時 ZSH 別名拋出錯誤

我一直在使用 iTerm2 和 zsh,並且使用以下別名,每次打開新的 iTerm2 視窗或選項卡時都會出現錯誤。

alias clear-git-branches="git fetch -p && for branch in `git branch -vv | grep ': gone]' | awk '{print $1}'`; do git branch -D $branch; done"

我得到的錯誤是:

fatal: not a git repository (or any of the parent directories): .git

由於它拋出一個與目錄不是 git 存儲庫相關的錯誤,我的猜測是它遇到了一些與其引號相關的問題。我嘗試更改它,但遇到了相同的錯誤。

我使用此命令清除沒有上游的本地分支。

答案1

正如卡米爾指出的,由於您使用雙引號而不是單引號,因此命令的某些部分被解析,別名正在加載(即當您在終端中打開選項卡或視窗時)。
當您在終端中運行它時,它看起來不錯,因為所有內容都會立即執行。

將所有內容放在單引號中可以解決問題,但會引入內部單引號的問題。我建議將其重寫為函數。在這種情況下,您可以像使用別名一樣使用它。

clear-git-branches() {
git fetch -p && \
for branch in $(git branch -vv | awk '/: gone]/{print $1}'); 
  do git branch -D "${branch}"; 
done
}

答案2

我在我的中遇到了類似或相同的問題.zshrc

# use gcm to checkout master or main
alias gcm="git checkout $(git remote show origin | grep 'HEAD branch' | sed 's/.*: //') && git pull"

打開新的 iTerm2 窗口或終端窗口,或重新加載環境後,我得到:

source ~/.zshrc
fatal: not a git repository (or any of the parent directories): .git

註解掉該行使問題消失:

# alias gcm="git checkout $(git remote show origin | grep 'HEAD branch' | sed 's/.*: //') && git pull"

重寫後;交換雙引號和單引號:

alias gcm='git checkout $(git remote show origin | grep "HEAD branch" | sed "s/.*: //") && git pull'

錯誤消失了。

相關內容