Alias ​​ZSH gerando erro ao abrir uma nova janela de terminal

Alias ​​ZSH gerando erro ao abrir uma nova janela de terminal

Estou usando o iTerm2 com zsh e, com o alias a seguir, recebo um erro sempre que abro uma nova janela ou guia do 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"

O erro que recebo é:

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

Como está gerando um erro relacionado ao diretório não ser um repositório git, meu palpite é que houve algum problema relacionado às suas cotações. Tentei alterá-lo, mas recebi o mesmo erro.

Eu uso este comando para limpar filiais locais sem upstream.

Responder1

Como Kamil apontou, como você está usando aspas duplas em vez de citações simples, algumas partes do comando são analisadas e os aliases estão sendo carregados (ou seja, quando você abre uma guia ou janela em seu terminal).
Parece bom quando você o executa em seu terminal porque tudo é executado de uma vez.

Colocar tudo entre aspas simples resolveria o problema, mas introduziria problemas com as aspas simples internas. Eu recomendo reescrevê-lo como uma função. Nesse caso, você pode usá-lo da mesma forma que usaria o alias.

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

Responder2

Eu tive um problema semelhante ou igual ao seguinte no meu .zshrc:

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

Ao abrir uma nova janela do iTerm2 ou janela de terminal, ou recarregar o ambiente, obtive:

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

Comentar essa linha fez com que o problema desaparecesse:

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

Depois de reescrever; trocando aspas duplas e simples:

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

O erro desapareceu.

informação relacionada