다음과 같은 쉘 함수가 있습니다.
rebar3 () {
set -o localoptions -o localtraps
trap '/bin/stty sane' INT
command rebar3 "$@"
}
바이너리를 어디서 command rebar3
찾을 수 있는지 어떻게 알 수 있나요 ?rebar3
다음을 시도했지만 그 중 아무 것도 작동하지 않습니다.
% which rebar3
rebar3 () {
set -o localoptions -o localtraps
trap '/bin/stty sane' INT
command rebar3 "$@"
}
...도움이 안 돼요.
% command -v rebar3
rebar3
...도움이 안 돼요.
% command -V rebar3
rebar3 is a shell function from /Users/rogerlipscombe/.zshrc
……이미 알고 있어요.
% command -p rebar3
zsh: command not found: rebar3
...바이너리가 기본 경로에 없기 때문입니다.
which
or를 사용할 때 zsh가 함수/별칭을 무시하도록 만드는 방법은 무엇입니까 command -v
?
답변1
POSIX 방식은 zsh에서 작동합니다.
(unalias rebar3 2>/dev/null; unset -f rebar3 2>/dev/null; command -v rebar3)
조회를 수행하는 POSIX 방식 PATH
도 명시적으로 적용됩니다. 여기서는 $PATH
빈 구성 요소가 없다고 가정하고 간단한 접근 방식을 보여줍니다 .
(IFS=:; set -f; for p in $PATH; do ls $p/rebar3 2>/dev/null; done)
Zsh는 다음 덕분에 경로를 찾는 더 쉬운 방법을 제공합니다.path
대량으로그리고N
글로벌 예선.
print -lr $path/rebar3(N)
command -v rebar3
type rebar3
또는 또는 또는 또는 같은 것을 원하는 아이디어로 시작 하려면 which rebar3
다음 문서를 찾으십시오.command
,type
또는which rebar3
, 이는 모두 이들이 중심에 있음을 나타냅니다.whence
내장. 이것이 당신을 안내할 것입니다
whence -p rebar3
외부 명령만 표시하거나 그 중 하나만 표시
whence -a rebar3
type -a rebar3
모든 것을 표시합니다(별칭, 기능, 내장 외부 명령). which -a rebar3
그것도 작동하지만 주의가 산만해지는 함수 코드가 표시됩니다.
답변2
나는 여기서 답을 찾았습니다.https://stackoverflow.com/a/14196212/8446
ZSH에서 이는 실행 경로를 알려주는 것이 아니라 함수의 정의를 표시하는 것과
which
동일합니다 . 변경하려면 별칭을 만드세요.whence -c
whence -p
% whence -p rebar3
/opt/homebrew/bin/rebar3