是否存在支持嵌套子命令的类Makefile Shell工具?
如果你想要在Shell环境里实现像Cobra那样的嵌套子命令功能,不用依赖Go生态,这几个工具绝对能满足你的需求:
1. Bashly
Bashly是我非常推荐的工具,它用YAML配置文件来定义你的CLI结构(包括嵌套子命令、参数、帮助信息等),然后自动生成纯Bash脚本——完全不需要额外依赖,直接在Shell里运行。
比如针对你想要的clean rpc、clean api和run命令,你可以写这样的YAML配置片段:
name: mytool help: "My custom tool with nested subcommands" version: "0.1.0" commands: - name: clean help: "Clean up resources" commands: - name: rpc help: "Clean RPC files" run: | rm -rf ./rpc - name: api help: "Clean API files" run: | rm -rf ./api - name: run help: "Run the service" run: | ./mytool clean rpc # 这里可以添加其他运行逻辑
然后用bashly generate就能生成可执行的mytool脚本,直接执行./mytool clean rpc或者./mytool run就搞定了,完全符合你想要的嵌套子命令逻辑。
2. Argbash
Argbash是另一个纯Shell的工具,它通过模板文件来定义命令和子命令,生成的脚本兼容性很好(支持大多数Bash版本)。你可以在模板里声明嵌套子命令、位置参数、选项等,然后用argbash工具生成最终的Shell脚本。
比如你可以定义一个模板,把clean作为主命令的子命令,再给clean添加rpc和api两个子命令,生成后就能直接在Shell里调用./mytool clean rpc这样的嵌套命令。它的优势是生成的脚本没有任何外部依赖,非常轻量。
3. Docopts
Docopts是基于“文档即规范”的理念,你只需要写好CLI的帮助文档(符合POSIX风格),它就能自动解析命令行参数,包括嵌套子命令。Shell版本的docopts可以直接嵌入你的脚本里,帮你处理子命令的解析逻辑。虽然它的学习曲线稍微有点陡,但灵活性很高,适合复杂的CLI场景。
这些工具都能帮你在Shell环境里实现类似Cobra的嵌套子命令功能,不用跳出Shell生态,完全满足你替代Make实现复杂命令逻辑的需求。
内容的提问来源于stack exchange,提问作者wymli

