任何人都有 bash 或 awk one-liner 来解析此命令的输出?
# whereis java
java: /usr/bin/java /usr/local/openjdk-8/bin/java
Run Code Online (Sandbox Code Playgroud)
所以它返回,在这种情况下,路径/usr/local/openjdk-8?IOW,是什么some_script?
# whereis java | some_script
/usr/local/openjdk-8
Run Code Online (Sandbox Code Playgroud)
我知道至少要这样做,但现在只是为了得到 /usr/local/openjdk-8
# whereis java | awk '{print($3)}'
/usr/local/openjdk-8/bin/java
Run Code Online (Sandbox Code Playgroud)
根据 Charles Duffy 的建议更新/编辑
使用这个命令
# type -P -a java
/usr/local/openjdk-8/bin/java
Run Code Online (Sandbox Code Playgroud)
我怎样才能用管道来得到这个?IOW,是什么some_script?
# type -P -a java | some_script
/usr/local/openjdk-8
Run Code Online (Sandbox Code Playgroud)
whereis不是 POSIX 标准化的,也不是 bash 本身的一部分。因此,它是一项特别糟糕的工作工具。
我强烈建议使用 shell-builtintype命令。如果您的目标是java在PATH查找期间找到第二个副本的顶级目录,则:
{ read _; read -r java_loc; } < <(type -P -a java)
echo "Java was found at $java_loc"
Run Code Online (Sandbox Code Playgroud)
一旦你明白了,剥离/bin/java就是一个简单的参数扩展(${var%suffix}指var之前的所有内容suffix):
{ read _; read -r java_loc; } < <(type -P -a java)
java_parent_loc=${java_loc%/bin/java}
echo "Java was found under ${java_parent_loc}"
Run Code Online (Sandbox Code Playgroud)
也就是说,我绝不建议将其作为设置您的方式的一种方式JAVA_HOME- 它非常不必要地脆弱,对您的PATH订单做出的假设不能保证是有充分根据的。