中断符号链接的Shell脚本文件存在性测试失败

中断符号链接的Shell脚本文件存在性测试失败,shell,sh,symlink,Shell,Sh,Symlink,此Bourne shell脚本无法检测到中断符号链接的存在。它返回false,并且不回显,但/usr/bin/firefox.real是一个存在但作为断开的符号链接的文件。为什么? FIREFOX="/usr/bin/firefox.real" [ -e "$FIREFOX" ] && echo "exists" 使用-h检查是否存在链接(即使已断开): 根据人工测试: -h FILE FILE exists and is a symbolic lin

此Bourne shell脚本无法检测到中断符号链接的存在。它返回
false
,并且不
回显
,但
/usr/bin/firefox.real
是一个存在但作为断开的符号链接的文件。为什么?

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

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

使用
-h
检查是否存在链接(即使已断开):

根据
人工测试

  -h FILE
          FILE exists and is a symbolic link (same as -L)

原因是在内部,当您使用-e进行测试时,bash将调用fstat(),而不是lstat(),因此它将检查文件本身,而不是符号链接。

谢谢!这个答案一针见血。它是针对bash的还是同样适用于Bourne shell(我感兴趣的shell)?谢谢您的回复。虽然它提供了测试链接的正确方法,但它并不能完全回答我提出的问题。
  -h FILE
          FILE exists and is a symbolic link (same as -L)