使用GNU getopt可以忽略未知的可选参数吗?
我有一个脚本scriptA.sh,它有可选的参数--optA, --optB, --optC, --optD.
我想写一个包装器,wrapperA,带有两个可选参数--optX and --optY,即调用scriptA.但是,我不想在包装器中声明scriptA的所有可选参数.
特别是,如果在里面wrapperA,我指定可选参数
getopt --longoptions optX:,optY:
Run Code Online (Sandbox Code Playgroud)
电话
wrapperA --optX --optA --optB
Run Code Online (Sandbox Code Playgroud)
返回错误
getopt: unknown option -- optA
Run Code Online (Sandbox Code Playgroud)
是否可以强制GNU getopt忽略未知参数并将它们放在输出中的' - '之后?
无法告诉GNU getopt忽略未知选项.如果您真的想要该功能,则必须编写自己的选项解析器.
只是忽略未知选项并不简单.你怎么知道一个未知的选项是否参与了争论?
原始脚本的示例用法:
originalscript --mode foo source
Run Code Online (Sandbox Code Playgroud)
这foo是选项的一个参数--mode.while source是"非选项参数"(有时称为"位置参数").
包装脚本的示例用法:
wrapperscript --with template --mode foo source
Run Code Online (Sandbox Code Playgroud)
getopt如何wrapperscript知道它应该--mode一起忽略foo?如果它只是忽略--mode那么originalscript将获得foo作为第一个位置参数.
一种可能的解决方法是告诉包装器脚本的用户在双短划线(--)后写入原始脚本的所有选项.按照惯例,双破折号标志着选项的结束.GNU getopt识别双破折号并停止解析并将其余部分作为位置参数返回.
也可以看看:
| 归档时间: |
|
| 查看次数: |
4008 次 |
| 最近记录: |