哪个和哪里有什么区别

哪个和哪里有什么区别

wherewhichshell 命令有什么区别?这里有些例子

 ~  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

对我来说,它们似乎做同样的事情,一个是内置的 shell,不太确定这与命令有什么不同?

答案1

zsh是为数不多的 shell 之一(其他 shell 是tcshwhich最初作为用户csh的脚本csh,也有其局限性,tcsh使其成为内置的作为改进))在哪里which做了一些明智的事情,因为它是 shell 内置的,但不知何故你或你的操作系统(通过某个rc文件)通过将其替换为对系统which命令的调用来破坏它,该系统命令无法可靠地执行任何明智的操作,因为它无法访问 shell 的实习生,因此无法知道 shell 如何解释命令名称。

在 zsh 中,所有which,type,whencewhere是内置命令,它们都用于查找命令是什么,但具有不同的输出。它们都是出于历史原因而存在的,您可以使用不同的标志来获取它们的所有行为whence命令。

您可以通过运行以下命令来获取每个功能的详细信息:

info zsh which
info zsh whence
...

或者输入info zsh,然后用 调出索引i,并输入内置名称(可以完成)。

并避免使用/usr/bin/which.现在已经没有壳了 which是需要的。正如 Timothy 所说,使用 shell 提供的内置函数。大多数 POSIX shell 都会有该type命令,并且您只能使用它command -v来获取命令的路径(尽管type和两者command -v在 POSIX 中都是可选的(但不是 Unix,并且不再在 LSB 中),它们在大多数(如果不是全部)中都可用。您可能会遇到类似 Bourne 的 shell)。

(顺便说一句,它看起来/usr/bin在您的 中出现两次,您可以在您的 中$PATH添加)typeset -U path~/.zshrc

答案2

区别一:

我想提一下一个很好的功能差异我从你的问题本身观察到:

which将列出第一个路径,找到传递的参数。

where将列出所有路径,找到传递的参数。

例如

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

区别2:

where不仅适用于 Unix,也适用于 Windows。

相关内容