最近、git branch <tab>
次のエラーが表示され始めました。
$ 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
どうすれば解決できますか?
私は次のような行を持っています~/.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
}
答え1
あなたのスクリプトは引用符を保持しません。完了後に実行される元の行は次のとおりです。
git --git-dir=.git for-each-ref '--format=%(refname:short)' refs/tags refs/heads refs/remotes
スクリプトを使用すると、次のようになります。
bash -c '/usr/bin/git --git-dir=.git for-each-ref --format=%(refname:short) refs/tags refs/heads refs/remotes'
次のような不足している引用符を参照してください。
--format=%(refname:short)
実際に何をしているのか見たことはありませんが、
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"'
または:
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'\'''
%q
フォーマットを確認したい場合がありますprintf
。