"명령" 명령은 어디서 찾을 수 있나요?

"명령" 명령은 어디서 찾을 수 있나요?

다음과 같은 쉘 함수가 있습니다.

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

...바이너리가 기본 경로에 없기 때문입니다.

whichor를 사용할 때 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 rebar3type 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 -cwhence -p

% whence -p rebar3
/opt/homebrew/bin/rebar3

관련 정보