对于损坏的符号链接,Shell脚本文件存在测试失败

时间:2014-10-18 12:45:32

标签: shell sh symlink

此Bourne shell脚本无法检测是否存在损坏的符号链接。它返回false并且不会echo/usr/bin/firefox.real是一个存在的文件,但是作为一个破损的符号链接。为什么呢?

FIREFOX="/usr/bin/firefox.real"

[ -e "$FIREFOX" ] && echo "exists"

2 个答案:

答案 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(),因此它会检查文件本身,而不是符号链接。