我有一个 (bash) shell script myBaseScript.sh
,具有以下签名:
myBaseScript.sh [OPTIONS] FILE1 [FILE2 ...]
该脚本myBaseScript.sh
通过 解析选项getopts
,如下所示:
while getopts ":hi:m:s:t:v:" opt; do
#...
done
shift $(($OPTIND-1))
FILES=("$@")
现在我希望创建一个脚本mySuperScript.sh
,它调用myBaseScript.sh
,允许将选项转发到基本脚本:
mySuperScript.sh [OPTIONS] DIR1 [DIR2 ...]
中[OPTIONS]
使用的选项在哪里myBaseScript.sh
;它们不用于mySuperScript.sh
.
该脚本mySuperScript.sh
将爬取所有目录DIR1
,[DIR2]
等等,编译一个有效文件列表,${FILES[@]}
然后传递给myBaseScript.sh
.
现在我有这个mySuperScript.sh
:
myBaseScript.sh "$@" "${FILES[@]}"
where${FILES[@]}
是当前路径中的文件列表。换句话说,这允许
mySuperScript.sh [OPTIONS]
但不适用于任何可选DIR1
的 ,[DIR2]
等。
我可以使用
allOpts=("$@")
while getopts ":hi:m:s:t:v:" opt; do echo. > /dev/null; done
shift $(($OPTIND-1))
DIRS=("$@")
然后传递as to的第一个$OPTIND
条目。但这似乎过于复杂,而且需要将有效选项列表复制到,这是管理上的噩梦。$allOpts
[OPTIONS]
myBaseScript.sh
myBaseScript.sh
我还可以创建一个新脚本,专门用于解析这些选项。但这似乎也有点尴尬,因为它产生了一种myBaseScript.sh
以前不存在的依赖关系......
那么,最干净的方法是什么?