Error de lanzamiento de alias ZSH al abrir una nueva ventana de terminal

Error de lanzamiento de alias ZSH al abrir una nueva ventana de terminal

He estado usando iTerm2 con zsh y con el siguiente alias aparece un error cada vez que abro una nueva ventana o pestaña de 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"

El error que me sale es:

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

Dado que arroja un error relacionado con que el directorio no es un repositorio de git, supongo que tiene algún problema relacionado con sus comillas. Intenté cambiarlo pero obtuve el mismo error.

Utilizo este comando para borrar sucursales locales sin flujo ascendente.

Respuesta1

Como señaló Kamil, dado que está utilizando comillas dobles en lugar de comillas simples, algunas partes del comando se analizan y los alias se cargan (es decir, cuando abre una pestaña o una ventana en su terminal).
Simplemente se ve bien cuando lo ejecuta en su terminal porque entonces todo se ejecuta a la vez.

Poner todo entre comillas simples resolvería el problema pero introduciría problemas con las comillas simples internas. Recomiendo reescribirlo como una función. En este caso, puede usarlo tal como usaría el alias.

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

Respuesta2

Tuve un problema similar o el mismo con lo siguiente en mi .zshrc:

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

Al abrir una nueva ventana de iTerm2 o ventana de terminal, o recargar el entorno, obtuve:

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

Comentar esa línea hizo que el problema desapareciera:

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

Después de reescribir; intercambiando comillas dobles y simples:

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

El error desapareció.

información relacionada