git log 명령에 별칭을 추가했습니다.
$ alias gl
alias gl='gn -c git log -w -b -p --ignore-blank-lines --full-history'
$ alias gn
alias gn='git-number'
명령의 -n 플래그는 이와
git-number
같이 하위 명령을 실행합니다sh -c
.
뭔가 이상한 걸 발견했어요. 내가 실행할 때 :
gl -- lib/X.pm
작동 방식은 다음과 같습니다.
gn -c "git log -w -b -p --ignore-blank-lines --full-history" -- lib/X.pm
그러나 나는 이것을 기대합니다(문자열 끝에 따옴표가 아님).
gn -c "git log -w -b -p --ignore-blank-lines --full-history -- lib/X.pm"
명령의 전체 기록은 다음과 같습니다.
$ gl -- lib/X.pm
fatal: ambiguous argument 'lib/X.pm': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
$ gn -c "git log -w -b -p --ignore-blank-lines --full-history" -- lib/X.pm
fatal: ambiguous argument 'lib/X.pm': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
$ gn -c "git log -w -b -p --ignore-blank-lines --full-history -- lib/X.pm"
commit 9ce3e165f284d55503eff9b627ef3723854c53bb
...other expected output
alias
별칭 옵션과 새 옵션을 강제로 함께 사용하려면 어떻게 해야 하나요 ?
답변1
앨리어싱은 명령줄에서 문자열을 텍스트로 대체하는 "어리석은" 작업입니다. 별칭은 매개변수를 사용하거나 작업을 수행할 수 없으며 별칭을 대체하기 위해 텍스트만 제공할 수 있습니다. 귀하의 예에서는 별칭 뒤에 매개 변수를 가져오고 싶습니다.끼워 넣다에서 호출한 명령에 이를 입력합니다 git-number
. 별칭은 매개변수를 이해하지 못하므로 이를 수행할 수 없습니다.
쉘 함수를 사용하십시오. 다음 셸 함수는 유틸리티에서 실행되는 명령에 인수를 제공하는 것과 똑같이 git-number -c
작동하는 것으로 가정됩니다.sh -c
gl () {
git-number -c 'git log -w -b -p --ignore-blank-lines --full-history "$@"' gn "$@"
}
쉘 함수는 명령 git-number -c
으로 호출되고 git log
그 뒤에 임의의 선택 문자열 gc
( git-number -c
이렇게 동작 하는 경우 실행 쉘에 sh -c
배치됨 )과 함수의 인용된 인수가 따라옵니다.$0
git log
"$@"
명령 은 git log
(역시 git-number -c
유사하게 작동하는 한 sh -c
) 인수 세트와 함께 호출되고 그 뒤에는 쉘 함수에 의해 전달된 인수가 따라옵니다.
gn
이 함수는 두 개의 인수로 호출되며 --
결국 lib/X.pm
에는 추가 인수 git log
( via )와 그 뒤에 .git-number -c
--
lib/X.pm
gn -c "git log -w -b -p --ignore-blank-lines --full-history -- -- lib/X.pm"
매개변수를 올바르게 전달하기 위해 작업 중이므로 공백과 개행 등이 포함된 매개변수 전달도 지원됩니다. 단순히 그렇게 하면 불가능합니다.주입 $@
git-number -c
쉘 함수에 의해 호출되는 명령을 입력하십시오.