alias 명령을 참조하는 매개변수입니다. 어떻게 작동하나요?

alias 명령을 참조하는 매개변수입니다. 어떻게 작동하나요?

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배치됨 )과 함수의 인용된 인수가 따라옵니다.$0git 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쉘 함수에 의해 호출되는 명령을 입력하십시오.

관련 정보