2013-11-04 26 views
0

下面一行引入了局部变量PROGUARD_HOME一个shell script内:如何在shell脚本中解析到父目录的符号链接?

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

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

Error: Unable to access jarfile /usr/local/bin/../lib/proguard.jar

我怎么可以重写环境变量的分配,这样,如果目前它解决了一个符号链接? 我知道resolving symbolic links in shell scripts上的一个非常类似的问题,但仍然无法弄清楚如何将这些解决方案与父文件夹方法结合在一起。

+0

什么打印错误:无法...? –

+0

可能的重复[可以Bash脚本告诉它存储在什么目录?](http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in) –

回答

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"