0

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

长版:我想要一行 BASH 脚本来设置EC2 命令行工具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不工作)。

4

3 回答 3

5
dirname $(dirname $(readlink -f $(which java)))
于 2013-11-07T21:21:48.170 回答
1

对于 Mac OS X 版本,试试这个:

dirname $(dirname $(perl -e "use Cwd; print Cwd::abs_path('$(which java)')"))
于 2013-11-07T21:31:07.843 回答
0

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

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

于 2013-11-07T21:31:03.097 回答