where
和which
shell 命令有什么区别?这里有些例子
~ 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 是tcsh
(which
最初作为用户csh
的脚本csh
,也有其局限性,tcsh
使其成为内置的作为改进))在哪里which
做了一些明智的事情,因为它是 shell 内置的,但不知何故你或你的操作系统(通过某个rc
文件)通过将其替换为对系统which
命令的调用来破坏它,该系统命令无法可靠地执行任何明智的操作,因为它无法访问 shell 的实习生,因此无法知道 shell 如何解释命令名称。
在 zsh 中,所有which
,type
,whence
和where
是内置命令,它们都用于查找命令是什么,但具有不同的输出。它们都是出于历史原因而存在的,您可以使用不同的标志来获取它们的所有行为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。