命令
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