2013-11-04 60 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"