【问题标题】:Shell script file existence test fails for broken symbolic linkShell 脚本文件存在测试因符号链接损坏而失败
【发布时间】:2014-12-13 21:56:00
【问题描述】:

此 Bourne shell 脚本未能检测到是否存在损坏的符号链接。它返回false 而不是echo/usr/bin/firefox.real 是一个存在但作为损坏的符号链接的文件。为什么?

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

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

【问题讨论】:

    标签: shell sh symlink


    【解决方案1】:

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

    【讨论】:

    • 谢谢!这个答案一针见血。它是特定于 bash 还是也适用于 Bourne shell(我感兴趣的 shell)?
    【解决方案2】:

    使用-h 检查链接是否存在(甚至损坏):

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

    根据man test

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

    【讨论】:

    • 感谢您的回复。虽然它提供了测试链接的正确方法,但并不能完全回答我提出的问题。
    猜你喜欢
    • 1970-01-01
    • 2020-07-05
    • 2016-06-14
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多