此Bourne shell腳本無法檢測到損壞的符號鏈接的存在。它返回false
而不是echo
但/usr/bin/firefox.real
是一個文件存在,但作爲一個錯誤的符號鏈接。爲什麼?Shell腳本文件存在測試失敗,表示破壞的符號鏈接
FIREFOX="/usr/bin/firefox.real"
[ -e "$FIREFOX" ] && echo "exists"
此Bourne shell腳本無法檢測到損壞的符號鏈接的存在。它返回false
而不是echo
但/usr/bin/firefox.real
是一個文件存在,但作爲一個錯誤的符號鏈接。爲什麼?Shell腳本文件存在測試失敗,表示破壞的符號鏈接
FIREFOX="/usr/bin/firefox.real"
[ -e "$FIREFOX" ] && echo "exists"
的原因是在內部,bash將調用FSTAT( ),而不是使用-st測試lstat(),所以它檢查文件本身,而不是符號鏈接。
使用-h
檢查鏈接(甚至碎)的存在:
[ -h "$FIREFOX" ] && echo "exists"
按man test
:
-h FILE
FILE exists and is a symbolic link (same as -L)
感謝您的回覆。雖然它提供了測試鏈接的正確方法,但它並沒有完全回答我提出的問題。 – 2014-10-19 06:44:56
謝謝!這個答案擊中了頭部。它是特定於'bash'還是它適用於Bourne shell(我感興趣的shell)呢? – 2014-10-19 06:42:58