Preenchimento automático do git quebrado depois de eu ter sobrescrito o comando git

1

Recentemente, git branch <tab> começou a me mostrar o seguinte erro:

$ git branch bash: -c: line 0: syntax error near unexpected token '('
bash: -c: line 0: '/usr/bin/git --git-dir=.git for-each-ref --format=%(refname:short) refs/tags refs/heads refs/remotes'
HEAD bash: -c: line 0: syntax error near unexpected token '('
bash: -c: line 0: '/usr/bin/git --git-dir=.git for-each-ref --format=%(refname:short) refs/tags refs/heads refs/remotes'
HEAD ^C

Como posso corrigir isso?

Eu tenho as seguintes linhas no meu ~/.bashrc :

git() {
    cmd=$1
    shift
    extra=""

    quoted_args=""
    whitespace="[[:space:]]"
    for i in "$@"
    do
        if [[ $i =~ $whitespace ]]
        then
            i=\"$i\"
        fi
        quoted_args="$quoted_args $i"
    done

    cmdToRun="'which git' "$cmd" $quoted_args"
    cmdToRun='echo $cmdToRun | sed -e 's/^ *//' -e 's/ *$//''
    bash -c "$cmdToRun"
    # Some mad science here
}
    
por Ionică Bizău 29.01.2015 / 10:38

1 resposta

1

Seu script não preserva as cotações. A linha original executada por conclusão é:

git --git-dir=.git for-each-ref '--format=%(refname:short)' refs/tags refs/heads refs/remotes

pelo seu script você recebe:

bash -c '/usr/bin/git --git-dir=.git for-each-ref --format=%(refname:short) refs/tags refs/heads refs/remotes'

Anote as citações que faltam:

--format=%(refname:short)

Não olhei para o que você realmente faz, mas isso:

quoted_args="$quoted_args \"$i\""
#                         |  |
#                         +--+------- Extra quotes.

deve resultar em algo como:

bash -c '/usr/bin/git --git-dir=.git "for-each-ref" "--format=%(refname:short)" "refs/tags" "refs/heads" "refs/remotes"'

ou:

quoted_args="$quoted_args '$i'"
#                         |  |
#                         +--+------- Extra quotes.

bash -c '/usr/bin/git --git-dir=.git '\''for-each-ref'\'' '\''--format=%(refname:short)'\'' '\''refs/tags'\'' '\''refs/heads'\'' '\''refs/remotes'\'''

Você pode querer olhar para o formato %q para printf .

    
por 29.01.2015 / 11:30