【发布时间】:2014-12-13 21:56:00
【问题描述】:
此 Bourne shell 脚本未能检测到是否存在损坏的符号链接。它返回false 而不是echo 但/usr/bin/firefox.real 是一个存在但作为损坏的符号链接的文件。为什么?
FIREFOX="/usr/bin/firefox.real"
[ -e "$FIREFOX" ] && echo "exists"
【问题讨论】:
此 Bourne shell 脚本未能检测到是否存在损坏的符号链接。它返回false 而不是echo 但/usr/bin/firefox.real 是一个存在但作为损坏的符号链接的文件。为什么?
FIREFOX="/usr/bin/firefox.real"
[ -e "$FIREFOX" ] && echo "exists"
【问题讨论】:
原因是在内部,当你使用 -e 进行测试时,bash 会调用 fstat(),而不是 lstat(),因此它会检查文件本身,而不是符号链接。
【讨论】:
bash 还是也适用于 Bourne shell(我感兴趣的 shell)?
使用-h 检查链接是否存在(甚至损坏):
[ -h "$FIREFOX" ] && echo "exists"
根据man test:
-h FILE
FILE exists and is a symbolic link (same as -L)
【讨论】: