최근에 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
.