Shell獲取當前路徑


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"`

[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`


echo "catalina_home is $CATALINA_HOME";
#此處的RPG抓取的是文件名,因為可能是符號鏈接,所以循環語句的作用就是找到文件真實源路徑
-h 用來判斷$PRG文件是否存在並且是一個符號鏈接
ls -ld "$PRG" 查看運行程序的當前目錄的詳細信息,只是目錄,不包括目錄下的子目錄和文件

link=`expr "$ls" : '.*-> \(.*\)$'` 中
expr 表示要根據某個模式去匹配字符串並返回所匹配到的字符串
或根據某個模式去計算匹配到的字符數。使用方式一般為: expr value : expression


"$ls" 表示取變量 ls 中的內容。


'.*-> \(.*\)$' 這部分是一個正則表達式, .* 部分表示任意字符, -> 是實際的兩個字符, Linux 中的軟鏈接會在使用 ls -al 命令列出文件的時候,以 "軟鏈接 -> 真實文件" 的方式顯示出軟鏈接與其所鏈接的真實文件。$ 在這里表示行結束 \( 就是 (, 因為 ( shell 中屬於特殊符號, 所以需要使用轉義; \) 同樣是轉義為 ) ;

整個 `expr "$ls" : '.*-> \(.*\)$'` 就表示取到軟連接的真實文件或真實目錄。

[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/nullpwd` 判斷變量$CATALINA_HOME是否存在,不存在則給予附值
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM