0

以下行介绍PROGUARD_HOMEshell 脚本中的局部变量:

PROGUARD_HOME=`dirname "$0"`/..

这指向 shell 脚本的父文件夹。脚本正常执行。- 然后,我创建了/usr/local/bin/proguard指向~/bin/proguard4.10/bin/proguard.sh. 当我使用符号链接运行 proguard 时,PROGUARD_HOME不再正确解析。这会导致 shell 脚本输出以下错误消息:

错误:无法访问 jarfile /usr/local/bin/../lib/proguard.jar

如何重写环境变量的分配,以便它解析符号链接(如果存在)?我知道关于解决 shell 脚本中的符号链接的一个非常相似的问题,但仍然无法弄清楚如何将这些解决方案与父文件夹方法结合在这里。

4

1 回答 1

1

我认为一个readlink -f $0揭示shell脚本本身的目标,然后一个dirname剥离脚本,然后另一个readlink -f产品应该可以解决问题:

PROGUARD_HOME=$(readlink -f $(dirname $(readlink -f "$0"))/..)

更一步一步的细分:

echo "\$0 is $0"
TRUENAMEOFSCRIPT=$(readlink -f $0)
echo "readlink -f of \$0 reveals $TRUENAMEOFSCRIPT"

DIRNAMEOFSCRIPT=$(dirname $TRUENAMEOFSCRIPT)
echo "The script lives in directory $DIRNAMEOFSCRIPT"

PARENTDIR=$(readlink -f "$DIRNAMEOFSCRIPT"/..)
echo "Its parent dir is $PARENTDIR"
于 2013-11-04T15:08:56.933 回答