Gui*_*mas 5 bash parsing options
我操纵了许多bash脚本,这些脚本可能会更改选项。更改选项涉及三个操作:
:g:h:pt例如)opt1=$OPTARG)这有点繁重,尤其是当您知道boost::program_options提供一个不错的接口来处理C ++中的选项时。
boost::program_options在Bash中有类似的东西吗?
Argbash在后台使用getopts ,但会为您管理大部分实现,并提供跨项目更一致的解析代码库。我已经成功地使用了它,它很棒,但确实有一个学习曲线。它是一个代码生成器,可创建支持长选项和短选项的解析器脚本,并自动创建帮助文档。它甚至对手册页也有帮助。
基本步骤是:
安装argbash。您可以使用现场的安装说明进行编译,但我建议使用Docker 容器
创建一个模板 m4 文件,定义您的选项。您可以手动执行此操作或创建脚本。
如果您使用 docker 容器,它会是这样的:
argbash-init-docker \
--opt myoption1 \
--opt-bool myoption2 \
--pos my_arg1 \
--pos my_arg2 \
parser.m4
使用您生成的模板作为输入运行 argbash。
就像是:
argbash-docker \
parser.m4 \
--strip user-content \
-o parser.sh
在将使用解析器的主脚本中,parser.sh从上一个命令的输出中获取脚本
source ./parser.sh
参考代码中的选项
如何引用布尔选项的示例:
 if test $_arg_myoption2 = on;then
 echo 'myoption2 is on'
 fi
测试
./my-script.sh --myoption2 arg1 arg2
重复
至于您对手动步骤的担忧,argbash 可以让您将其保持在最低限度。您可以达到这样的程度:您只需更新模板并运行构建脚本。我当前的实现确实有比我想要的更多的手动步骤,但我很快就会将它们自动化。
我在README-Argbash中有关于如何在我的项目中使用它的更详细的概述,您可以查看我的代码以了解我如何在主脚本中使用它。
docopts 的缺点是它需要将 docopt 解释器单独分发给 cli 的每个用户。这对我来说是不行的。附带说明一下,Argbash 可以生成符合 docopt 的帮助文档以用作 docopt 模板。