GNU Coreutils 手册中 ls 实用程序的“--dereference-command-link-symlink-to-dir”选项的描述是否错误?

GNU Coreutils 手册中 ls 实用程序的“--dereference-command-link-symlink-to-dir”选项的描述是否错误?

以下是手册中所涉及的文本。

--dereference-command-line-symlink-to-dir

不取消引用符号链接,但有一个例外:如果命令行参数指定了指向目录的符号链接,则显示该目录的信息而不是链接本身的信息。当未指定其他与取消引用相关的选项时(--classify-F)、--directory-d)、(-l)、--dereference-L)或--dereference-command-line-H)),这是默认行为。

以下是我在终端上运行的一些命令。

$ touch myfile.txt
$ ln --symbolic myfile.txt symlink_myfile
$ ls --classify symlink_myfile 
symlink_myfile@

如果默认行为是不取消引用符号链接,除非指定了取消引用相关的选项,那么为什么 ls --classify 会生成“symlink_myfile@”?

指定了取消引用选项 --classify,因此我的符号链接应该被取消引用。

答案1

man(以及大多数其他 GNU 程序)的页面只是ls一个非常简化的摘要。在您的例子中,它说这--dereference-command-line-symlink-to-dir是默认设置,除非给出了与解除引用相关的选项-F,但它没有说明在以下情况下解除引用会发生什么:-F 给出(所以它不是错误的,只是不完整)。关于的条目-F也没有帮助:

-F, --classify
        append indicator (one of */=>@|) to entries

完整文档中提供了更多有用信息,可以使用info ls或访问在线的

‘-F’
‘--classify’
‘--indicator-style=classify’
     Append a character to each file name indicating the file type.
     Also, for regular files that are executable, append ‘*’.  The file
     type indicators are ‘/’ for directories, ‘@’ for symbolic links,
     ‘|’ for FIFOs, ‘=’ for sockets, ‘>’ for doors, and nothing for
     regular files.  Do not follow symbolic links listed on the command
     line unless the ‘--dereference-command-line’ (‘-H’),
     ‘--dereference’ (‘-L’), or
     ‘--dereference-command-line-symlink-to-dir’ options are specified.

因此-F默认情况下不会取消引用。

相关内容