预处理1个单选项

预处理1个单选项

我有一个 Shell 脚本(适用于 Linux/Mac/Cygwin 用户),它包装了一个可执行 JAR。

在将参数(长形式或短形式)传递给 Java 程序之前,我需要预处理一个选项(即,其目录必须添加到 Java 类路径的路径以及必须传递给 Java 程序的文件名) 。

getoptgetopts如果我不指定传递给脚本的所有选项,则会抱怨。但是,我只想指定需要预处理的内容(以短形式和长形式)。

还有什么选择呢?

仅供参考,这是我想要做的事情的粗略说明:

#!/bin/sh

# extracts _FOLDER_ and _FILE_ from "--changelog"/"-c" option
# I need the add the _FOLDER_ to Java classpath
# and _FILE_ to my program
java -cp .:_FOLDER_:my.jar my.main.class ALL_OTHER_OPTIONS

答案1

您必须解析所有选项(与包装命令相同的方式),否则您需要诉诸启发式方法并做好在许多情况下失败的准备。

假设你正在写一个:

#! /bin/sh -
# process options
exec cmd "$@"

cmd接受-a, -b,-c带参数和-n,-p不带参数,并且您的包装器想知道 的参数是什么-c

如果脚本被调用为:

wrapper.sh -npc foo
wrapper.sh -b -c -n -ca-c
wrapper.sh -- -cx

它无法找出参数是什么,-c除非它知道-n并且-p不接受参数 and -a, -bdo 。

您可以使用启发式方法:查找以-and开头的参数c,然后查看其后的内容,但这对于上面的所有示例都会失败(除了第一个发生的情况-n并且-p不接受参数)。

相关内容