查找没有它的二进制路径

dfa*_*l07 0 linux bash shell which

我贡献的一个开源项目依赖于which我想删除的项目,因为一些Linux发行版(如Fedora 20的云版本)默认不附带它,我相信强制安装它是很难的,鉴于我们使用它是多么微不足道.

我们所做的只是找到Java二进制文件的路径,然后使用该信息进行设置$JAVA_HOME.

有没有办法用Bash内置插件做到这一点?一般来说,如何在最小化依赖性(如which)的同时优雅地找到二进制文件?或者它是一个更好的调用只是使用which,例如,如果唯一的选择是find针对目录运行$PATH,社区认为是非常不优雅?

请注意,对于谷歌而言,这对于which相关的事情来说是极其无效的.

Bru*_*e K 6

POSIX-ly正确的方式:

cmd=$(command -v whatever)
Run Code Online (Sandbox Code Playgroud)


jul*_*enc 5

也许通过解析内置shell的输出type

~/ type python
python is /usr/bin/python
~/ type type
type is a shell builtin
Run Code Online (Sandbox Code Playgroud)

经过测试zsh,bashsh

如果您正在使用bash,该选项-P可直接为您提供所需的结果:

~/ type -P python
/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

  • ...因为使用`type -P`将以不需要解析的方式返回精确的结果. (2认同)