gpt4 book ai didi

Linux GNU getopt : ignore unknown optional arguments?

转载 作者:IT王子 更新时间:2023-10-29 00:26:13 29 4
gpt4 key购买 nike

是否可以使用 GNU getopt 忽略未知的可选参数?

我有一个脚本 scriptA.sh,它有可选参数 --optA, --optB, --optC, --optD

我想编写一个包装器 wrapperA,它带有两个可选参数 --optX 和 --optY,它们调用 scriptA。但是,我不想在包装器内声明 scriptA 的所有可选参数。

特别是,如果在 wrapperA 中,我用

指定可选参数
getopt --longoptions optX:,optY:

电话

wrapperA --optX --optA --optB

返回错误

getopt: unknown option -- optA

是否可以强制 GNU getopt 忽略未知参数并将它们放在输出中的“--”之后?

最佳答案

告诉 GNU getopt 忽略未知选项是不可能的。如果您真的想要该功能,则必须编写自己的选项解析器。

这不是仅仅忽略未知选项那么简单。您如何判断未知选项是否接受参数?

原始脚本的用法示例:

originalscript --mode foo source

此处 foo 是选项 --mode 的参数。而 source 是一个“非选项参数”(有时称为“位置参数”)。

封装脚本的用法示例:

wrapperscript --with template --mode foo source

wrapperscript 中的 getopt 如何知道它应该忽略 --modefoo?如果它只是忽略 --mode 那么 originalscript 将得到 foo 作为第一个位置参数。

一个可能的解决方法是告诉包装脚本的用户在双破折号 (--) 之后写下所有用于原始脚本的选项。按照惯例,双破折号标记选项的结尾。 GNU getopt 识别双破折号并停止解析并将其余部分作为位置参数返回。

另见:

关于Linux GNU getopt : ignore unknown optional arguments?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24705637/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com