【问题标题】:File is both a regular file and a symlink文件既是常规文件又是符号链接
【发布时间】:2014-11-05 14:46:28
【问题描述】:

我有三个文件,一个是真实的(“常规”)文件和两个链接的符号链接:

-rw-r--r--   1 user  staff       24  4 Nov 18:23 A
lrwxr-xr-x   1 user  staff        1 25 Oct 17:43 B -> A
lrwxr-xr-x   1 user  staff        1  4 Nov 16:54 C -> B

现在,使用zsh 条件表达式([[),我测试B(或C)是常规文件还是符号链接,zsh 对两者都表示是...:

18:31 : [[ -f B ]] && echo "True"
True
18:31 : [[ -h B ]] && echo "True"
True

符号链接不应该是不是一个常规文件吗? zsh 条件表达式文档 (here) 没有详细说明不同情况的工作原理。

zsh --version
zsh 5.0.5 (x86_64-apple-darwin14.0)

编辑

经过更多挖掘,我在 Unix.SE 上找到了这个问答:https://unix.stackexchange.com/questions/22009/distinguishing-a-regular-file-from-a-symlink。这是关于bash,但看起来它也适用于zsh

【问题讨论】:

    标签: shell zsh symlink


    【解决方案1】:

    zsh 几乎肯定会使用来自lstat(2)S_ISREG()S_ISLNK() 宏。由于S_ISLNK()S_ISREG() 更年轻,我想符号链接在历史上在这里被视为常规文件(因为它们不是目录、块/字符设备等),并且为了向后兼容而保留了该行为。但是,我无法找到任何直接证据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多