通过BASH查找系统上是否有“which”命令

时间:2011-08-30 08:42:38

标签: linux bash shell

在编写BASH脚本时,我通常使用Linux机器的which命令(Linux机器指的是基于桌面的Linux操作系统,如Ubuntu,Fedora,OpenSUSE)来查找其他二进制文件的路径或可用性。我了解which可以搜索PATH变量集中存在的二进制文件(命令)。

现在,如果该机器上没有which命令本身,我无法理解如何继续。

我的目的是创建一个可以在机器上运行的shell脚本(BASH),如果环境不够(比如缺少脚本中使用的某些命令),它应该能够正常退出。 / p>

有没有人在这方面有任何建议。我知道可以使用locatefind等方法 - 但是,即使它们不可用,也会如此。我已经知道的另一个选项是我在which/usr/bin//bin/这样的标准路径上寻找/usr/local/bin/二进制文件。还有其他可能性吗?

提前致谢。

2 个答案:

答案 0 :(得分:8)

type which

type是一个bash内置命令,所以它总是在bash中可用。有关详细信息,请参阅man bash

注意,这也会识别别名:

$ alias la='ls -l -a'
$ type la
la is aliased to 'ls -l -a'

答案 1 :(得分:2)

(更多的评论是因为Boldewyn回答得很完美,但这是对某些人可能感兴趣的问题的另一种看法。)

如果您担心某人可能已经搞乱了您的bash安装并以某种方式删除了which,那么我认为理论上,当您实际调用该命令时,您将获得127的退出代码。

考虑

$ sdgsdg
-bash: sdgsdg: command not found
$ echo $?
127

bash中的退出代码:http://tldp.org/LDP/abs/html/exitcodes.html

当然,如果有人删除了which,那么我也不会相信退出代码。