命令
What is Subcommand
示例程序
没有子命令的 CLI app - Covered on wget
像 wget 这样的古典 Unix app,并不提供子命令。它可能带有大量的标志,其中一些标志带有命令性质,会请求 app 使用不同的工作逻辑。
一个非完整的 wget 复刻品,在 cmdr 支持下可以这样编写:
注意对于仅有根命令的 app,直接在 app 对象上应用 OnAction 来指定命令响应回调函数。
如果你已经喜欢上了 CommandBuilder/FlagBuilder 方式来构造命令和标志,在 app 对象上还有一个 RootBuilder 可以为你开启相应的回调代码块:
这和 app.Cmd("subcmd").With(func(b cli.CommandBuilder){ ... }) 相似,只不过 parent 代表的是 app.RootCommand(),而 b 代表的是新建的子命令 subcmd。
运行时的帮助屏效果为:

带有多级子命令
有颜色的描述文字
在 Description 字段被显示之前,它会首先被 is/term/color 中的颜色预处理器格式化。
所以它实际上是带有颜色属性的。
这些格式化的特性包含一个微型 HTML Tag 解析器。这就是说,下面的代码能够正确工作:
相应的输出在一个支持颜色的终端仿真器上大致是这样的效果:

详情可以参考 hedzr/is 的相关介绍。
除了 Description 字段之外,Header, Footer, 以及 Examples 等等字段也包含颜色预格式化能力。
展开环境变量
在 Description (常规的单行描述,以及长格式的多行描述),Examples 等字段显示之前,其中的环境变量将被自动展开。
这包含两个层次:
$AppName格式 将被os.ExpandEnv()进行处理并展开。{ {.AppNmae}}格式将被一个text.Template引擎进行展开。
第一个格式所能展开的环境变量,取决于你的 Shell 环境。除此之外,cmdr 在运行时刻也附加额外的环境变量,基本上这包括了:
可用的环境变量列表可以通过执行命令 app ~~debug ~~env 来显示。
第二个格式所能展开的变量,包含在如下的结构定义中:
如需进一步信息,请查阅相应的源代码:func (s *parseCtx) Translate(pattern string) (result string)。
额外的话题
额外的话题
How is this guide?
Last updated on