'which'有内置的bash吗?

mik*_*ana 16 bash

我一直在测试最小的 Fedora 安装。要检查 python 或 node 等解释器的路径,我通常使用which.

我注意到which默认情况下未安装。我可以添加这个包,但我想知道是否有一个内置的 shell 可以用来执行这个常见的任务。

我正在使用 bash 4.2。

l0b*_*0b0 26

您可以使用typeBash 内置函数:

$ type -P which
which is /usr/bin/which
Run Code Online (Sandbox Code Playgroud)

有关文档,请参阅help [t]ype,它指的typebash手册页中的部分。

help type打印以字符串“type”开头的两个 内置函数的帮助页面,其中一个已过时且与此完全无关。)

  • 我自己喜欢 `type -a`。为什么`[t]ype`中的括号? (3认同)
  • 我鼓励遇到此问题的任何人也阅读此 U&L 问答。它涵盖了您想知道的关于“which”的所有内容。[为什么不使用“哪个”?那用什么?](http://unix.stackexchange.com/questions/85249/why-not-use-which-what-to-use-then) (2认同)

小智 10

您可以使用typecommand -v。的输出type是人类可读的;的输出command -v可以由 Bash 执行。

请注意,它们实际上有点不同。typecommand查找命令的散列值。也就是说,如果您键入cmdtype cmdcommand -v cmd会告诉您确切将运行什么。它们还处理别名、Bash 函数和 Bash 内置函数(尽管type -p会忽略这些并且只返回真实文件)。

which只是在 PATH 上进行搜索。这是不同的,因为:

  • 如果存在同名的别名、函数或内置函数,则将改为调用它。
  • 如果某个命令自上次散列后较早添加到 PATH 中,它将被 找到which,但执行该命令将使用散列值(您可以使用 强制更新 Bash 中的散列hash -r)。

通常人们真的想要type,而不是which,至少用于交互使用,因为他们使用它来找出“当我运行它时这个命令来自哪里?” 仅which当您确实想要进行 PATH 查找时才应使用。