where
그것과 which
쉘 명령의 차이점은 무엇입니까? 여기 몇 가지 예가 있어요
~ where cc
/usr/bin/cc
/usr/bin/cc
~ which cc
/usr/bin/cc
그리고
~ which which
which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
/usr/bin/which
~ which where
/usr/bin/which: no where in (/usr/local/bin:/bin:/usr/bin:/home/bnikhil/bin:/bin)
반품
~ where which
which: aliased to alias | /usr/bin/which --tty-only --read-alias --show-dot
--show-tilde
which: shell built-in command
/usr/bin/which
/usr/bin/which
~ where where
where: shell built-in command
나에게 그들은 똑같은 일을 하는 것 같습니다. 하나는 내장 쉘입니다. 이것이 명령과 어떻게 다른지 잘 모르겠습니다.
답변1
zsh
셸에 내장되어 있기 때문에 몇 가지 합리적인 작업을 수행하는 몇 안 되는 셸 중 하나입니다(다른 셸은 tcsh
( which
원래 사용자 csh
스크립트 로 csh
, tcsh
개선 사항으로 내장되는 제한 사항도 있음)) which
또는 OS(일부 rc
파일을 통해)가 쉘의 인턴에 액세스할 수 없기 때문에 합리적인 작업을 안정적으로 수행할 수 없는 시스템 명령에 대한 호출로 대체하여 이를 손상시켰습니다 which
. 따라서 쉘이 어떻게 작동하는지 알 수 있는 방법이 없습니다. 명령 이름을 해석합니다.
zsh에서는 모두which
,type
,whence
그리고where
내장 명령은 둘 다 명령이 무엇인지 찾는 데 사용되지만 출력은 다릅니다. 그것들은 모두 역사적인 이유로 존재하며 다른 플래그를 사용하여 모든 동작을 얻을 수 있습니다.whence
주문하다.
다음 명령을 실행하면 각 함수의 세부정보를 확인할 수 있습니다.
info zsh which
info zsh whence
...
또는 를 입력 info zsh
한 후 로 색인을 불러오고 i
내장 이름을 입력합니다(가능함).
이제 그것을 사용하지 마십시오 /usr/bin/which
.저것 which
필요합니다. Timothy가 말했듯이 쉘에서 제공하는 내장 기능을 사용하십시오. 대부분의 POSIX 셸에는 이 명령이 있으며 명령에 대한 경로를 가져오는 type
데만 사용할 수 있습니다 . ( 및 둘 다 POSIX에서는 선택 사항이지만(Unix는 아니고 더 이상 LSB에서는 아님) 대부분의 경우 사용할 수 있습니다. Bourne과 같은 껍질).command -v
type
command -v
(그런데, 귀하의 항목에 두 번 나타나는 것 같습니다 . 귀하의 항목에 추가 /usr/bin
할 수 있습니다 .)$PATH
typeset -U path
~/.zshrc
답변2
차이점 1:
좋은 기능 차이점을 언급하고 싶습니다나는 당신의 질문 자체에서 관찰했습니다:
which
전달된 매개변수가 있는 첫 번째 경로가 나열됩니다.
where
모든 경로가 나열되어 전달된 매개변수를 찾습니다.
예를 들어
~ which tree
/bin/tree
~ where tree
/bin/tree
/usr/bin/tree
차이점 2:
where
Unix뿐만 아니라 Windows에서도 마찬가지입니다.