【问题标题】:How to resolve a symbolic link to a parent directory in a shell script?如何在 shell 脚本中解析指向父目录的符号链接?
【发布时间】:2013-11-15 05:11:45
【问题描述】:

以下行在shell script 中引入了局部变量PROGUARD_HOME

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

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

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

如何重写环境变量的分配,以便它解析符号链接(如果存在)? 我知道resolving symbolic links in shell scripts 上有一个非常相似的问题,但仍然无法弄清楚如何将这些解决方案与此处的父文件夹方法结合起来。

【问题讨论】:

标签: shell proguard symlink dirname


【解决方案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"

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2023-04-04
    • 2012-10-28
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多