是否有用于‘which’的 bash 内置命令?

是否有用于‘which’的 bash 内置命令?

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

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

我正在使用 bash 4.2。

答案1

您可以使用type,它是 Bash 内置的:

$ type -P which
which is /usr/bin/which

有关文档,请参阅help [t]ype,其中引用了手册页type中的部分bash

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

答案2

您可以使用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 查找时使用。

相关内容