¿Cómo activo el autocompletado para un alias de git-flow?

Esto está rompiendo

alias f='git flow feature' complete -F __git_flow_feature f 

Funciona eventualmente (después de 2 'tabs') pero arroja un error en cada 'pestaña' presionada.

 -bash: [: 1: unary operator expected 

¿Algunas ideas?

Funciona para mí, cuando lo hago:

  1. wget http://www.triquanta.nl/sites/default/files/git-flow.bash
  2. fuente git-flow.bash
  3. alias f = 'característica de flujo de git'
  4. completo -F __git_flow_feature f
  5. pestaña f pestaña

De todos modos, la razón más común para el error "[: 1: operador unario esperado" es que tiene en el código del script de shell como:

 if [ 1 = $MYVAL ] 

y tu MYVAL no está configurado. Inspeccione sus funciones de finalización. Puede agregar set -x para depurarlo.

Por lo general, la solución más fácil es citar la variable para que el operador obtenga el argumento vacío, pero tendrá la cantidad correcta de arguments:

 if [ 1 = "$MYVAL" ] 

También tuve este problema y cada búsqueda en Google me llevó de vuelta a esta publicación.

Estoy publicando la solución que encontré usando la respuesta de Michal y el comentario de Daenyth …

Mi git-flow.bash era idéntico, pero creo que nuestros files de finalización de git pueden variar.

Para arreglar esto, tuve que modificar mi file de finalización de git ubicado en /etc/bash_completion.d/git

Antiguo:

 # __git_find_on_cmdline requires 1 argument __git_find_on_cmdline () { local word subcommand c=1 while [ $c -lt $cword ]; do word="${words[c]}" for subcommand in $1; do if [ "$subcommand" = "$word" ]; then echo "$subcommand" return fi done c=$((++c)) done } 

Nuevo:

 # __git_find_on_cmdline requires 1 argument __git_find_on_cmdline () { local word subcommand c=1 while [[ $c -lt $cword ]]; do word="${words[c]}" for subcommand in $1; do if [ "$subcommand" = "$word" ]; then echo "$subcommand" return fi done c=$((++c)) done } 

Observe el doble corchete que tuve que agregar al nuevo código. Ese fue el único cambio que hice.

¿Por qué no solo usas git-flow-completion ? Las instrucciones para bash son:

 $ cd /etc/bash_completion.d $ sudo wget https://raw.githubusercontent.com/bobthecow/git-flow-completion/master/git-flow-completion.bash $ exec $SHELL 

también hay instrucciones para zsh o fish .

Tengo este alias:

 alias gn="git-number" alias gb="gn -c git blame" alias ge="gn -c $EDITOR" alias ga="gn add" alias gr="gn -c git reset" alias gap="EDITOR='$EDITOR -w' gn add -p" alias gd="gn -c git diff -b -w --ignore-blank-lines" alias gds="gd --staged" alias gc="gn -c git checkout" alias gcf="git flow feature checkout" alias gl="gn -c git log -w -b -p --ignore-blank-lines" alias gls="git log --stat" alias cm="EDITOR='$EDITOR -w' git commit" alias grb="git stash save 'REBASE' && EDITOR='$EDITOR -w' git rebase -i" alias grbc="EDITOR='$EDITOR -w' git rebase --continue" gcd() { test -n "$1" && cd $(dirname $(git list $1)) } source ~/.git-completion.bash __git_complete gn _git __git_complete ga _git_add __git_complete gap _git_add __git_complete gd _git_diff __git_complete gds _git_diff __git_complete gc _git_checkout __git_complete gcf _git_checkout __git_complete gl _git_log __git_complete gls _git_log __git_complete cm _git_commit source ~/.git-flow-completion.bash 

E instale scripts de completion como:

 wget -O ~/.git-completion.bash https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash wget -O ~/.git-flow-completion.bash https://raw.githubusercontent.com/petervanderdoes/git-flow-completion/develop/git-flow-completion.bash 

El número de Git anotado aquí es: https://github.com/holygeek/git-number Solo copie los binarys en el repository para ~/bin