이들 which 와 where 의 차이점은 무엇인가요?

이들 which 와 where 의 차이점은 무엇인가요?

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 -vtypecommand -v

(그런데, 귀하의 항목에 두 번 나타나는 것 같습니다 . 귀하의 항목에 추가 /usr/bin할 수 있습니다 .)$PATHtypeset -U path~/.zshrc

답변2

차이점 1:

좋은 기능 차이점을 언급하고 싶습니다나는 당신의 질문 자체에서 관찰했습니다:

which전달된 매개변수가 있는 첫 번째 경로가 나열됩니다.

where모든 경로가 나열되어 전달된 매개변수를 찾습니다.

예를 들어

 ~ which tree
/bin/tree
 ~ where tree
/bin/tree
/usr/bin/tree

차이점 2:

whereUnix뿐만 아니라 Windows에서도 마찬가지입니다.

관련 정보