说,我有一个用这行调用的脚本:
./myscript -vfd ./foo/bar/someFile -o /fizz/someOtherFile
Run Code Online (Sandbox Code Playgroud)
或者这个:
./myscript -v -f -d -o /fizz/someOtherFile ./foo/bar/someFile
Run Code Online (Sandbox Code Playgroud)
什么是分析这使得在每一种情况下(或两者的组合)的接受的方式$v,$f以及 $d将全部设置为true和$outFile将等于/fizz/someOtherFile?
当我编写shell脚本时,我经常发现自己花费了大部分时间(特别是在调试时)处理参数处理.我编写或维护的许多脚本很容易超过80%的输入解析和清理.我将它与我的Python脚本进行比较,其中argparse为我处理大部分繁琐的工作,并让我轻松构建复杂的选项结构和清理/字符串解析行为.
因此,我希望能够让Python做这个繁重的工作,然后在我的shell脚本中获取这些简化和清理的值,而无需进一步担心用户指定的参数.
举一个具体的例子,我工作的许多shell脚本已被定义为按特定顺序接受它们的参数.你可以调用start_server.sh --server myserver --port 80但start_server.sh --port 80 --server myserver失败You must specify a server to start.- 它使解析代码更简单,但它很难直观.
所以第一遍解决方案可能就像让Python接受参数,对它们进行排序(将它们的参数保持在它们旁边)并返回已排序的参数一样简单.因此shell脚本仍然进行一些解析和清理,但是用户可以输入比shell脚本本身接受的更多任意内容,例如:
# script.sh -o -aR --dir /tmp/test --verbose
#!/bin/bash
args=$(order.py "$@")
# args is set to "-a --dir /tmp/test -o -R --verbose"
# simpler processing now that we can guarantee the order of parameters
Run Code Online (Sandbox Code Playgroud)
这里有一些明显的限制,特别是parse.py无法区分带参数的最终选项和索引参数的开头,但这似乎并不可怕.
所以这是我的问题:1)是否有任何现有的(优选的Python)实用程序通过比bash更强大的功能来启用CLI解析,然后可以在清理后通过我的其余bash脚本访问,或者2)之前是否有人这样做过?是否存在我不知道的问题或陷阱或更好的解决方案?关心分享您的实施?
一个(非常半生不熟)的想法:
#!/bin/bash
# Some sort of simple syntax to describe to Python …Run Code Online (Sandbox Code Playgroud)