有针对“哪个”的内置bash吗?


16

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

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

我正在使用bash 4.2。


1
某种程度上,对Windows的等效搜索使我来到了这里。对于将来的观看者:“ where”将告诉您给定文件的路径。
橡皮鸭2014年

1
我鼓励遇到此问题的任何人也阅读此U&L问答。它涵盖了您想了解的所有内容which为什么不使用“哪个”呢?那要用什么呢?
slm 2014年

Answers:


26

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

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

有关文档,请参见help [t]ype,该参考手册页中的type部分bash

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


3
我喜欢type -a我自己。为什么放在括号中[t]ype
glenn jackman 2014年

type -a将打印该参数指向的所有内容,而不仅仅是打印该参数时将执行的内容。
l0b0 2014年

2
我鼓励遇到此问题的任何人也阅读此U&L问答。它涵盖了您想了解的所有内容which为什么不使用“哪个”呢?那要用什么呢?
slm 2014年

列表中的第一件事type -a始终是执行的内容。我和Glenn一样,也总是使用type -a
slm

1
type -p如果command是别名,则不显示路径。type -P总是正确显示命令路径。我认为。我们应该将接受的答案更新为type -P@ l0b0
dirigeant 2014年

10

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

请注意,它们实际上有些不同。typecommand查找命令的哈希值。就是说,如果您键入cmdtype cmd或者command -v cmd会告诉您确切要运行的内容。它们还可以处理别名,Bash函数和Bash内置函数(尽管type -p将忽略它们并仅返回真实文件)。

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

  • 如果别名,函数或内建函数具有相同的名称,则会改为调用它。
  • 如果自上次对其进行哈希处理以来,已在PATH中添加了一个命令,它将通过进行查找which,但执行该命令将使用该哈希值(您可以使用强制更新Bash中的哈希值hash -r)。

通常人们真的想要type而不是which至少是为了交互使用,因为他们使用它来查找“该命令从何而来?” 仅which当您确实要进行PATH查找时才应使用。


command -v等于ksh whence
Henk Langeveld 2014年

1
因此,我们有wherewhence,当然也whowhywhen?为什么没有what
哈根·冯·埃岑

echo 'main(){printf("what\n");}' | sudo cc -x c - -o /usr/local/bin/what
IvanVučica2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.