如何在BASH脚本中删除路径?

时间:2013-11-07 21:19:17

标签: linux bash

简短版本:我想从readlink -f的结果中取出最后两个组件,并使用一行BASH脚本将其存储在变量中。

长版本:我想要一行BASH脚本来为EC2 command-line tools设置JAVA_HOME变量。此变量存储Java的主目录的位置。使用以下内容,我可以获得java二进制文件的绝对路径:

$ readlink -f $(which java)

在我的测试机器上,输出:

/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

除了我需要砍掉“/ bin / java”之外,这是完美的。我可以使用字符串替换在我的配置文件中这样做:

JAVA_HOME=$(readlink -f $(which java))
export JAVA_HOME="${JAVA_HOME%/*/*}"

编辑:现在唯一的问题是它是两行。我已经接受了下面的答案,它使它成为一个,但它仍然只适用于Linux,而在OS X上,必须从此运行./Commands/java_home才能获得真正的目录。

额外功劳:让它在OS X上工作(readlink -f does not work)。

3 个答案:

答案 0 :(得分:5)

dirname $(dirname $(readlink -f $(which java)))

答案 1 :(得分:1)

对于Mac OS X版本,请尝试以下操作:

dirname $(dirname $(perl -e "use Cwd; print Cwd::abs_path('$(which java)')"))

答案 2 :(得分:0)

这应该可以用于提取/bin/java,即使在MAC OSX(未经测试)

上也是如此

echo ${JAVA_HOME##${JAVA_HOME%/*/*}}