交互式命令使用参考:您通常在 Unix 上使用它吗?

3 documentation options posix qnx

为什么某些命令依赖manpages而其他命令依赖于诸如--help标志之类的东西来提供命令用法参考的问题并不新鲜。命令文档命令用法概要之间的范围通常存在差异。后者通常是前者的一个子集。但是,即使大多数命令和实用程序都有联机帮助页,它们的概要部分的格式也存在差异,这在尝试提取此类信息时具有非常实际的意义。在其他情况下,strings当命令似乎没有文档时,人们可能会通过该实用程序找到线索。

我对这个QNX平台上的命令很感兴趣,并发现了use命令1来显示使用信息。如 中所述usemsg,该框架涉及在实用程序源中设置标准使用记录,一旦编译,就可以使用use命令访问它,您还可以包装本机功能等。这非常方便,因为我可以简单地做

use -d dir >>file
Run Code Online (Sandbox Code Playgroud)

/base/proc/boot提取所有使用该系统基本上所有的命令。

所以我然后简要地查看了GNU coreutils lsFreeBSD ls的源代码,看看它们是否做了类似的事情,前者将使用信息放在一些名为函数的用法中(我猜),而后者似乎没有把它放在任何地方根本(?)。--help


  • 这种解决方案( use) 是您在商业 Unix 中发现的以交互方式呈现命令使用参考的典型解决方案吗?
  • POSIX/SUS 是否推荐或建议有关在命令中呈现/实现命令用法参考的任何内容(而不是为shell 实用程序指定符号)?

1.use命令:

use
Print a usage message (QNX Neutrino)

Syntax:
use [-aeis] [-d directory] [-f filelist] files

Options:
-a
    Extract all usage information from the load module in its source form, suitable for piping into usemsg. 
-d directory
    Recursively display information for all files under directory. 
-e
    Include only ELF files. 
-f filelist
    Read a list of files, one per line, from the specified filelist file, and display information for each. 
-i
    Display build properties about a load module. 
-s
    Display the version numbers of the source used in the executable. 
files
    One or more executable load modules or shell scripts that contain usage messages. 
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 5

商业 unice 通常只在手册页中提供使用信息。让命令本身显示使用信息不是传统的 Unix 功能(除了显示支持的选项列表,但没有任何解释,使用错误)。POSIX 和它的亲戚不会谈论这样的事情。

有一个--help显示使用摘要的选项(通常是一个选项列表,每行一个,每个选项最多有约 60 个字符的描述)是GNU 标准。据我所知,这个约定是由 GNU 项目发起的,作为多字母选项名称的双破折号约定的一部分。还有其他实用程序,例如 X11 实用程序,它们使用带有单个破折号和支持的多字母选项名称-help;不知道是哪个先来的。

use命令是QNX的事情。


Vol*_*gel 5

您在示例中引用了 GNU 工具。这些在 Linux 和许多其他平台上可用,并且在文档方面有些不寻常。

GNU 工具,实际上似乎三个层次越来越详细的交互参考:

--help作为通用命令选项 - 简短的使用摘要
man- 经典手册页,“快速参考”,以及
info- 更详细的 GNU 特定手册 - 完整的官方文档

通常,人们只是使用手册页作为默认文档 - 即使知道“他们说”GNU 信息文档更详细和官方。

它会根据喜好略有不同,但我认为以下使用模式很常见:

  • 使用man foo默认情况下
    • 对所有选项的解释
    • 有时感觉有点简洁,但足够好
  • 使用foo --help有时,对于的问题,作为不确定的选项名称,
    • 带有紧凑布局的简短摘要
  • 并使用info foo...几乎从不
    • 这可能会提供更多上下文详细信息以及指向其他命令的链接
    • 但是没有人可以使用 emacs 风格的信息浏览器 UI,所以我们不会确切地找出。
  • 以及其他基于网络的文档,
    • 就像手册页太简洁一样。


然而,有一个问题:

对于最常用的命令,从所述coreutils,等lscpmkdircsplit和更多的人,

手册页man foo包含与 完全相同的信息foo --help (1)

这意味着“真正的文档”,实际上,不在手册页中——正如我们所想的那样......
它实际上在我们没有阅读GNU 信息文件中!

现在,同时查看manpage 和 (下部) --help,很难注意到内容是相同的,因为手册页看起来如此“详细”。这是因为两种变体之间的文本布局密度差异非常大。--help与极其放松的间距相比,非常压缩man


自己对比一下,印象深刻:

ls --help | less

man ls | less

info --subnodes ls | less

(该选项--subnodes呈现页面线性,以进行比较。本身info显示超文本,链接在类似于 HTML 的文档之间。该man命令包括less强制非彩色输出以便于比较。)


一些相关提示:

对于默认信息查看器info,有更舒适的替代品,例如 - 用于终端 -pinfo或 - 用于 GUI - konqueror。实施例使用这样的:
pinfo lskonqueror info:ls或使用info:ls中的URL栏konqueror


作为一个特例,所述的文档内部命令GNU的bash
这是所谓的壳建宏,可以与被访问help命令。
例如,在 的命令行上bash,尝试
help cd


1)幸运的是,@PádraigBrady 在他的回答中指出了这一点