softlink 又叫作symbolic link,至關於一種」快捷方式」,由ln –s sourcefile distinctionfile (ln –s TARGET LINK_NAME)建立,鏈接文件的存在使得簡化了文件系統,用戶操做起來更加方便。但在Shell編程中倒是一個須要很是注意的點,由於工做目錄(Work Directory)的緣由,Shell須要使用「標準」的變量(跟系統環境變量有些相似)來定位它當前的工做目錄以及這些目錄中的文件,假如工做目錄定義出了錯,那Shell腳本預計很難運行正確。例如Shell腳本中使用了$(pwd)或者其餘相對的路徑而不是絕對路徑,那不出錯就奇怪了!由於softlink的存在會致使一些編寫很差的Shell腳本在以softlink的方式引用或者執行時就會出現大問題,爲了不這個問題,就須要將softlink解析成真正的文件,或者獲取真正的工做目錄。編程
解決方式以下(參考tomcat的catalina.sh腳本):tomcat
# resolve links - $0 may be a softlink - stolen from catalina.sh PRG="$0" while [ -h "$PRG" ]; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`/"$link" fi done PRGDIR=`dirname "$PRG"`
通過以上處理,就能夠將工做目錄(Work Directory)設定成PRGDIR,從而解決工做目錄的問題,應用舉例:bash
#!/bin/bash # resolve links - $0 may be a softlink PRG="$0" while [ -h "$PRG" ]; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`/"$link" fi done # Get standard environment variables PRGDIR=`dirname "$PRG"` # Public header WORKDIR=$PRGDIR # Where to get source code SOURCEURL= # end public header # -Public header function deploy() {
--end--ide