首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析"whereis“输出以获得Linux中所需的路径?

如何解析"whereis“输出以获得Linux中所需的路径?
EN

Stack Overflow用户
提问于 2020-12-30 19:15:38
回答 2查看 518关注 0票数 1

有人有bash或awk一行程序来解析此命令的输出吗?

代码语言:javascript
复制
# whereis java
java: /usr/bin/java /usr/local/openjdk-8/bin/java

那么,在这种情况下,它返回路径/usr/local/openjdk-8吗?some_script是什么?

代码语言:javascript
复制
# whereis java | some_script
/usr/local/openjdk-8

我知道至少可以这么做,但现在我只想让/usr/local/openjdk-8

代码语言:javascript
复制
# whereis java | awk '{print($3)}'
/usr/local/openjdk-8/bin/java

更新/编辑根据查尔斯·达菲的建议

使用此命令

代码语言:javascript
复制
# type -P -a java
/usr/local/openjdk-8/bin/java

我怎么才能把它吹走才能得到这个?some_script是什么?

代码语言:javascript
复制
# type -P -a java | some_script
/usr/local/openjdk-8
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-30 19:24:16

whereis不是POSIX标准,也不是bash本身的一部分。因此,对于这项工作来说,这是一个特别糟糕的工具。

我强烈建议使用shell内置的type命令。如果您的目标是为在java查找过程中找到的第二份PATH找到顶层目录,那么:

代码语言:javascript
复制
{ read _; read -r java_loc; } < <(type -P -a java)
echo "Java was found at $java_loc"

一旦实现了这一点,去掉/bin/java是一个简单的参数扩展(因为${var%suffix}指的是suffix之前的var中的所有内容):

代码语言:javascript
复制
{ read _; read -r java_loc; } < <(type -P -a java)
java_parent_loc=${java_loc%/bin/java}
echo "Java was found under ${java_parent_loc}"

尽管如此,我绝不推荐这是一种设置你的JAVA_HOME的方法--它是非常脆弱的,对你的PATH订单做了一些假设,但这些假设并不一定是有充分根据的。

票数 5
EN

Stack Overflow用户

发布于 2020-12-30 20:36:05

尝尝这个

代码语言:javascript
复制
 type -a -P java | grep -Eo "(/[^/]+){3}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65512407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档