CLI 工具帮助要求

概览

命令行帮助(通常通过 --help 提供)是一种与用户沟通的重要方式。该示例提供了更详细的文档和功能发现的简写形式。

导视

帮助文档必须包含: * 用法 * 说明

帮助文档可能会根据需要增加以下部分:

示例

本文档后面部分将详细介绍此示例。(请注意,blast 不是真正的工具)。

Usage: blast [-f] [-s <scribble>] <command> [<args>]

Destroy the contents of <file>.

Options:
  -f                force, ignore minor errors. This description
                    is so long that it wraps to the next line.
  -s <scribble>     write <scribble> repeatedly
  -v, --verbose     say more. Defaults to $BLAST_VERBOSE.

Commands:
  blow-up         explosively separate
  grind           make smaller by many small cuts
  help            get help on other commands e.g. `blast help grind`

Examples:
  Scribble 'abc' and then run |grind|.
  $ blast -s 'abc' grind old.txt taxes.cp

Notes:
  Use `blast help <command>` for details on [<args>] for a subcommand.

Error codes:
  2 The blade is too dull.
  3 Out of fuel.

总体布局和样式

如需查看符合这些要求的示例,请参阅上文。

有些部分需要英语散文。也就是说,使用美式英语拼写(而非英式英语或其他)以英语语法撰写合适的句子。在句子之间使用一个空格,并遵循“牛津逗号”样式。例如,“说明、示例和备注部分是用英文书写的。”

布局

  • 每个部分均以一个空白行分隔。
  • 部分内容缩进两个空格。
  • 单行内容将写在标签所在的行中,并以空格分隔冒号和命令名称。例如“Usage: blast <file>”。
  • 多行部分将紧跟在标签后写入(没有空行)。标签后面的每一行都会缩进两个空格。
  • 所有输出都是单列文本,但“选项”“命令”和“错误代码”除外,它们是两个列表。
  • 使用空格进行缩进或对齐。不输出制表符。
  • 第 80 列有文本换行。封装选项说明或命令说明时,请将后续行与说明的开头对齐(例如,大约 20 个字符)。

样式

  • 版块标题采用词首字母大写形式:将第一个和最后一个单词的首字母大写。中间的所有单词也采用大写形式,但冠词(a、an、the)、连词(例如,and、 but、or)和介词(例如 on、in、with)除外。
  • 简短说明片段(选项或命令中的第二列)以小写字母开头,不需要完整的句子。简短说明以外的任何文本都应是完整的句子,并在片段后添加句点。
  • 尽量确保每个部分都简洁明了。如果需要的话,请在运行 --help 时让用户使用 --verbose,或者引导他们查看完整文档。
  • 描述性文本(散文)中允许使用 Unicode (UTF-8) 字符。命令名称和用法文本将仅包含便携式 ASCII 字符(不带 Unicode)。

用法

需要使用此属性,且包含“Usage:”标头。

Usage: blast [-f] [-s <scribble>] <command> [<args>]

通常情况下,使用单行,但可以使用多行来阐明选项是互斥的情况。如果呈现所有互斥场景所需的行数过多,请将这些行限制为一些常见的情况,并在完整文档中提供更多详细信息。如果有许多互斥的选项,请考虑创建子命令或单独的工具以降低复杂性。

用法语法

命令名称列在最前面。命令名称未经过硬编码:系统会从命令名称(即 argv[0] 路径上的最后一个元素)中动态提取该名称。这样一来,单个二进制文件就可以作为多个不同工具运行。

名称和使用文本将仅包含便携式 ASCII 字符。所有长命令均完全采用小写形式,即绝不能采用全大写形式或混合大小写形式。单字母开关应首选小写,但允许使用大写。

使用有意义的字词作为选项和占位符。避免使用缩写。首选单个字词。当使用多个单词时,请使用连字符 (-) 分隔单词,即不要使用下划线、驼峰式大小写或将多个单词组合在一起。

除了命令名称之外,还有几种参数(如 Fuchsia 工具要求中所述)。

  • 完全匹配的文字
  • 参数
  • 选项(开关和按键)
  • 键控选项
  • 选项分隔符
确切文本语法

确切文字会在用法行中按原样编写。在示例“Usage: copy <from> to <destination>”中,to 一词必须是确切文字。如果确切文本是可选的,则它将用括号 ([]) 括起来,并放置在用法行“Usage: copy <from> [to] <destination>”中。

参数语法

参数用尖括号 (<>) 括起来,以便与显式文本区分开来。在示例 Usage: copy <from> <destination> 中,<from><destination> 都是参数。如果参数是可选参数,会用括号 ([]) 括起来,例如:Usage: copy <from> [<destination>]。另请参阅选项分隔符

互斥选项语法

在展示互斥的选项时,有几个选项可供选择。

如果提供了多个用法行,则每行将显示一组互斥的命令。例如:

Usage:
  swizzle [-z] <file>
  swizzle --reset

表示 --reset 和与 <file> 一起使用是互斥选项。

指定互斥选项的另一种方法是在选项之间使用竖线(“|”)。请注意,竖线用于指示进程之间的数据流时,称为“竖线”。用于分隔选项时,其读作“Or”。

例如:

Usage: froth [-y|-z] <file>

表示可以使用 -y-z 开关(或者两者都不用,因为它们是可选的),但同时使用这两者毫无意义(它们是互斥的选项)。如需指明必须使用任一值(但不能同时使用两者),请将选项括在括号中,例如“Usage: froth (-a|-b) <file>”表示必须传递 -a -b

请注意,--version--help 导致其他参数被忽略的情况很常见,很少这样列出。我们认为没有必要将它们列为单独的用法行。

分组(隐含)选项

没有具体的语法可以指明,启用一个选项也会影响另一个选项。当某个选项暗示启用或停用另一个选项时,请在“选项”中进行指定。例如,“passing -e implies -f”表示,如果启用了 -e,系统会启用 -f,就像在命令行中传递它一样(无论是否显式传递了 -f)。隐含值的冗余传递不会产生任何不良后果(而非错误)。

记录主开关中的含义。例如,如果 -x implies -c and -p 将该注释放入 -x 的说明中,但未放入 -c-p 中。这是为了确保 --help 输出简洁明了(此规则可在完整文档中放宽)。

可选键

如需创建带有可选键的键控选项的外观,请创建可选的完全匹配文本,后跟一个参数。例如“Usage: copy [from] <from> [to] <destination>”。在本示例中,以下所有字符均有效:“copy a b”“copy from a b”“copy from a to b”“copy a to b”。

重复选项

如果同一位置参数可以重复,请使用省略号(“...”)指示。使用三个连续句点而不是 Unicode 省略号。例如:“Usage: copy <from> [<from>...] <to>”表示最后一个参数始终解释为 <to>,而前面的值是多个 <from> 条目。请注意,“<from> [<from>...]”表示有一个或多个 <from> 条目,而“Usage: copy [<from>...] <to>”表示接受零个或多个 <from> 条目。

对于可能重复的键值对,请用方括号(如果键值对不是必需的)或圆括号(如果键值对不是可选的)将其分组,并在组中添加省略号,例如分别添加省略号(例如 [--input <file>]...(--input <file>)...)。

括号

尖括号 (<>)、方括号 ([]) 和圆括号 (()) 内不得立即加入空格。

[from] # correct
<to> # correct
(-a|-b) # correct

[ from ] # incorrect
< to > # incorrect
( -a|-b ) # incorrect

尖括号 (<>) 用于封装参数或键值。

方括号 ([]) 用于封装可选元素。使用嵌套的尖括号(例如 [<file>])时,将 <file> 解释为可选参数。嵌套的“[<”不是单独的括号样式,而是包含“<”的“[”。嵌套时,方括号 ([) 位于最外层(请勿使用 <[file]>)。

圆括号 (()) 用于对元素进行分组。使用括号提高清晰度,例如使用必需的互斥选项。

大括号 ({}) 已预留以供日后使用。本指南特意在本文档的未来修订版本中,为大括号留出了特殊含义。

说明

说明为必填项,且不包含标题。也就是说,说明区域不带“description”标签。例如

Destroy the contents of <file>.

说明以美式英语散文(使用美式英语语法、拼写和标点符号的完整句子)撰写。

每个工具都应说明其用途,这一部分可用于完成相应工作。

“说明”部分应描述

  • 工具的用途(必需)
  • 所使用的平台配置
  • 所使用的架构、数据格式或协议
  • 黄金工作流(关键开发者历程)
  • 提供指向文档的广泛网址(例如 fuchsia.com/docs 或类似网址,避免使用容易过时的深层链接)

“说明”部分还可以包含“另请参阅”,通过名称来指代其他工具(避免使用网址)。

不应在“说明”部分中输入的内容

  • 使用的环境变量,而不是“选项”中列出的环境变量(请在“选项”或“备注”中提供此信息)
  • 安全隐患(在“备注”部分说明)
  • 错误代码(将其置于“错误代码”部分中)
  • 版权(请勿在 --help 中包含此信息)
  • author(请勿在 --help 中包含此内容)
  • 如何获取有关子命令的帮助(将此信息添加到 help 子命令的简短说明中)
  • 如何更新工具(如适用,应包含在工具包的文档中)
  • 版本说明(使用单独的文件)

选项

如果程序接受参数,则需要“选项”部分。例如

Options:
  -f              force, ignore minor errors
  -s <scribble>   write <scribble> repeatedly. Defaults to $BLAST_SCRIBBLE.

列出的选项适用于该工具本身,而不适用于子命令。针对各个子命令请求帮助时(例如,在使用 blast help grindblast grind --help 时),系统会列出该子命令的相关选项。

尽量保留一个完整字词的选项。如果需要两个单词,请使用连字符 (-) 将其分隔开。避免使用不常用的缩写。

按字母顺序显示选项列表。

Options 会在单独的行中列出每个参数、switch 和键控选项,但参数既有短格式,也有长格式。如果参数既有短格式,也有长格式,它们会列在同一行中,短格式在前,并用 ,(英文逗号)分隔,例如 -f, --force

“选项”部分中不会列出确切的文本参数。它们显示在“用量”部分中。

按原样输入的文本不会用括号括起来,而变量条目显示在尖括号 (<>) 中,可选条目显示在方括号 ([]) 中。列出选项时,键绝不是可选的。例如:

  -a                   a good example
  [-b]                 a bad example, to use -b it must be typed as-is

每个选项后面都有简短的说明。此说明没有长度限制,但应简明扼要。请尝试在整体工具说明、示例或备注中提供更多详细信息,而不是创建冗长的选项说明。

要描述的内容

  • 选项所代表的含义的简短提醒,例如 ignore minor errors
  • 如果该选项覆盖了其他选项(例如 -x implies -c and -p
  • 默认值,例如 defaults to $BLAST_SCRIBBLE

说明句子片段开始的列可能会因工具的需要而有所不同。如果看起来没问题,使用距左侧边缘 20 个字符;如果增加或减少一点,阅读效果会更好。

如果有大量选项,请考虑显示一个有用的子集,并说明如何获取更多帮助以查看所有选项,例如传递 --verbose--help

命令

如果程序包含子命令,则需要包含命令部分。如果存在,则带有“Commands:”标签。例如

Commands:
  blow-up         explosively separate
  grind           make smaller by many small cuts
  help            get help on other commands e.g. `blast help grind`

如果程序没有子命令,命令部分将不会显示。

当某个工具具有子命令时,它还会使用 help 命令来获取有关子命令(即 blast help grind)的进一步帮助。

尽量使子命令只包含一个完整的字词。如果需要两个单词,请使用连字符 (-) 将其分隔开。避免使用不常用的缩写。按字母顺序显示命令列表。

每个命令名称的单独一行显示一条简短说明。如需了解更详细的命令说明,用户将明确请求关于该命令的帮助。此说明是对命令的简短提醒,有助于发现命令。

如果存在大量命令,请考虑显示一个有用的子集,并说明如何获取更多帮助以查看所有命令,例如传递 --verbose--help

示例

您可以视需要选择是否提供示例部分。如果存在,则带有“示例”标签。 例如

Examples:
  Scribble 'abc' and then run |grind|.
  $ blast -s 'abc' grind old.txt taxes.cp

每个示例都包含描述示例的美式英语散文(即使用美式英语语法、拼写和标点符号的完整句子),后跟一个示例命令行。原本需要在命令行中输入的每一行都会带有一个“$”前缀,以模拟命令提示符。

如需封装过长的示例,请在上一行以“\”结尾,并以“”(空格)开头,以表示继续行。

  This example wraps onto multiple lines.
  $ blast -s 2332 some/long/path/cats.o \
    more/long/path/dogs.o more/long/path/bears.o \
    more/long/path/deer.o

如果显示示例命令中的某些输出有帮助,请紧随示例写入输出。

请使用一个空白行来分隔示例。

如果“示例”部分过长,请将示例移至帮助文档中。交互式帮助示例便于用户快速参考和查找,而不是详尽说明文档。

备注

备注是可选的,以“Notes:”标题开头。例如

Notes:
  Use `blast help <command>` for details on [<args>] for a subcommand.

备注以美式英语散文(即使用美式英语语法、拼写和标点符号的完整句子)编写。

在备注中输入的内容

  • 使用的环境变量,而不是选项中已列出的环境变量(适用于默认值)
  • 安全隐患
  • 以帮助用户

不应在备注中输入的内容

  • 错误代码(将其置于“错误代码”部分中)
  • 版权(请勿在 --help 中包含此信息)
  • author(请勿在 --help 中包含此内容)
  • 如何获取有关子命令的帮助(将此信息添加到 help 子命令的简短说明中)
  • 如何更新工具(如适用,应包含在工具包的文档中)
  • 版本说明(使用单独的文件)

错误代码

如果生成了 01 以外的代码,则必须提供“错误代码”部分。例如

Error codes:
  2  The blade is too dull.
  3  Out of fuel.

如果程序仅生成 01 结果,则省略此部分。

错误代码 0 始终被视为“无错误”,错误代码 1 始终是“常规错误”。--help 输出中也不会记录这两种情况。除了 01 之外,工具可能生成的每个错误代码都必须记录在案。

平台详情

某些平台(例如 DOS)使用其他选项前缀(例如 /),或者可能允许使用不区分大小写的开关。无论平台如何,工具都将使用短划线前缀 (-) 和区分大小写的选项。这意味着工具的文档通常不需要考虑正在使用的平台。

--help 输出中不应包含的内容

不要显示等号 (=) 的键值对,例如 --scribble=abc。 在解析键和值时,会使用空格作为分隔符 (--scribble abc)。在帮助中显示等号可能会让人感到困惑。

请勿实现分页器(类似于 more 程序,它会在每次过滤文本时暂停输出)。

不包含

  • 帮助输出(在 legal 指定的位置)中的版权。
  • 版本说明(将其放入版本说明)。
  • 完整文档(请将其放在 Markdown 文档中)。
  • 版本信息(从 --version 输出)。
  • 有关结果代码 01 的文档(放在 .md 文档中)。
  • 关于 shell 的帮助(例如,如何将输出或管道重定向到分页器)。