简短版本:我想从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)。
答案 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%/*/*}}