此Bourne shell脚本无法检测是否存在损坏的符号链接。它返回false
并且不会echo
但/usr/bin/firefox.real
是一个存在的文件,但是作为一个破损的符号链接。为什么呢?
FIREFOX="/usr/bin/firefox.real"
[ -e "$FIREFOX" ] && echo "exists"
答案 0 :(得分:2)
使用-h
检查是否存在链接(甚至已损坏):
[ -h "$FIREFOX" ] && echo "exists"
根据man test
:
-h FILE
FILE exists and is a symbolic link (same as -L)
答案 1 :(得分:2)
原因是在内部,bash在使用-e进行测试时会调用fstat()而不是lstat(),因此它会检查文件本身,而不是符号链接。