以下行介绍了shell script中的局部变量PROGUARD_HOME
:
PROGUARD_HOME=`dirname "$0"`/..
这指向shell脚本的父文件夹。该脚本正常执行。 - 然后,我创建了引用/usr/local/bin/proguard
的符号链接~/bin/proguard4.10/bin/proguard.sh
。当我使用符号链接PROGUARD_HOME
运行proguard时,不再正确解析。这会导致shell脚本输出以下错误消息:
错误:无法访问jarfile / usr / local / bin /../ lib / proguard.jar
如何重写环境变量的分配,以便解析符号链接(如果存在)? 我在resolving symbolic links in shell scripts上发现了一个非常相似的问题,但仍然无法弄清楚如何将这些解决方案与父文件夹方法结合起来。
答案 0 :(得分: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"