使用Bash构建自定义CLI

当由于遵从性规则而无法使用现代语言(例如Ruby,Python或Go)或不允许使用这种语言时,如果要构建自定义CLI并确保它可以在各种系统上运行,则Bash脚本是必经之路。

Bash( bash )是许多可用的(至今仍是最常用的)Unix shell之一。 Bash代表“ Bourne A gain SH ell”,是对原始Bourne壳( sh )的替换/改进。
资料来源:https://askubuntu.com/a/172487

在这里,我们将使用配置文件和(子)命令(包括使用Bash兼容脚本的帮助和使用说明)来构建模块化CLI。

通过参数命令所有命令的名称

首先,我们选择一个名称,然后考虑命令及其参数。 最后,此示例中的CLI应该通过Helm将一系列应用程序部署到Kubernetes集群。 您的用例可能有所不同😉

我们将CLI bagcli Brot和Games CLI,它在我们的脑海中具有命令行的最终视图-这应该是不带命令或拼写错误的命令调用bagcli的输出。

  $ ./bagcli 

巴格里
Brot和游戏CLI
版本:0.1.0

用法:bagcli [命令]

命令:
部署部署
* 救命

bagcli deploy命令应具有自己的用法说明,如果缺少参数 ,也应显示该用法说明。

  $ ./bagcli部署 
 命令:部署 
 用法: 
部署project_name

模块化目录结构

接下来,我们确定CLI的目录结构。 由于我们正在构建一个模块化CLI,每个(子)命令只有一个文件,因此我们需要一个干净的目录结构。

  / path / to / bagcli / 
├──版本
├──bagcli
├──命令
│└── 部署
├──普通
└──配置模板

生成的Bash脚本和文件的详细信息

  • bagcli是入口点脚本,用于加载配置并确定命令/参数,以从commands目录中执行哪个文件。
    示例: bagcli deploy 处理命令和参数,并使用参数调用commands/deploy
  • commands/deploy有其自己的帮助和使用说明。 它使用参数并使用参数调用helm
  • common具有所有脚本需要的所有功能(例如,用于记录)。
  • config.template就像名称中所说的那样,是一个模板,可让最终用户轻松配置CLI。 指导用户进行cp config.template config并根据需要更新文件。 由于可能的敏感数据,Git等版本系统应忽略文件config

以下是核心文件的基本实现: bagclicommands/deploycommonconfig.template

可以通过cp commands/deploy commands/my_command并编辑commands/my_command文件来轻松扩展它以满足您的需求。 不要忘记将其连接到bagcli文件(所有命令的入口点)的case语句中。

还有一个GitHub存储库,您可以在其中找到具有更好的错误处理和其他改进功能的最新版本。

https://github.com/brotandgames/bagcli

您可以将其用作项目的蓝图或框架。

本文已于2019年5月4日提交给Hacker News和reddit。

谢谢阅读。

💋保持简单和愚蠢。