myBaseScript.sh次の署名を持つ(bash)シェルスクリプトがあります:
myBaseScript.sh [OPTIONS] FILE1 [FILE2 ...]
このスクリプトは、次のようにmyBaseScript.shを介してオプションを解析します。getopts
while getopts ":hi:m:s:t:v:" opt; do
#...
done
shift $(($OPTIND-1))
FILES=("$@")
mySuperScript.shここで、 を呼び出すscript を作成して、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 の最初のエントリ$OPTINDをに渡します。しかし、これは非常に複雑に思えます。さらに、有効なオプションのリストを に複製する必要があり、これは管理上の悪夢です。$allOpts[OPTIONS]myBaseScript.shmyBaseScript.sh
これらのオプションの解析専用の新しいスクリプトを作成することもできます。しかし、それは以前には存在しなかった依存関係を作成するため、少し厄介に思えmyBaseScript.shます...
では、これを行う最もクリーンな方法は何ですか?