以下行介绍了 shell 脚本中的局部变量PROGUARD_HOME
:
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 脚本中的符号链接的一个非常相似的问题,但仍然无法弄清楚如何将这些解决方案与这里的父文件夹方法相结合。
我认为一个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"