交互式命令使用参考:Unix 上一般都有吗?

交互式命令使用参考:Unix 上一般都有吗?

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

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

use -d dir >>file

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

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


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

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. 

答案1

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

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

use命令是 QNX 的东西。

答案2

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

实际上,GNU 工具似乎具有三个级别越来越详细的互动参考:

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

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

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

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


然而,有一个问题:

对于最常用的命令,从包裹coreutilslscpmkdircsplit以及更多,

手册页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 lsorkonqueror info:lsinfo:ls在 的 url 栏中使用konqueror


作为一个特例,文档内部命令GNU 的bash
称为shell 内置函数,可以通过命令访问help
例如,在 的命令行上bash,尝试
help cd


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

答案3

注意 GNU coreutils 手册页是从 $cmd --help 生成的

另请注意,bash 内置命令至少不支持 --help。在那里你需要使用help umask例如。现在 POSIX 允许,并且 ksh 至少使用umask --help.最近有人提议 bash 也可能接受这种语法

相关内容