異なる数のプログラム(prog1、prog2、... prog5、またはそれ以上)を同時に実行できるスクリプトを作成しようとしています。
prog1のみ、prog1&prog2、prog1&prog2&prog3、prog1&prog3&prog4&prog6&prog8のいずれかになります。
各プログラムは異なるオプションで呼び出すことができ、呼び出しオプションに応じて異なることを実行します。
たとえば、prog1は次のさまざまな方法で呼び出すことができます。
prog1 -d "-f 10 -g 20"
(-dはオプションであり、その特定のオプションの "-f 10 -g 20"引数)prog1 -B
prog1 -R "-l 2 -m 9"
prog1 -S "10 20 30"
次のような組み合わせで呼び出すこともできます。
prog1 -d "-f 10 -g 20" -B -R "-l 2 -m 9"
この問題に対処するために、2段階のgetopt(ネストされたgetopt)を使用することにしました。
最初の段階では、getoptは、ユーザーがスクリプトへの入力として提供するさまざまなプログラムを処理します。第2段階では、getoptは各プログラムが取得できるさまざまなオプションと引数を処理します。
私のスクリプトは次のとおりです。
#!/bin/bash
args=`getopt -o :v -l prog1:,prog2,prog3,prog4,prog5 -- "$@"` # Here prog2,prog3..prog5 do not have a colon (:) to save some space but all of them will eventually get since when they are called they should have input arguments
eval set -- "$args"
while true; do
case $1 in
-v ) echo "VERBOSE"; shift;;
--prog1 )
echo "prog1 has been chosen with the following option:$2"
args=`getopt -o :d:BR:S: -- "$@"`
eval set -- "$args"
while true; do
case $1 in
-d ) echo "-d:$2"; shift 2;;
-B ) echo "-B"; shift;;
-R ) echo "-R:$2" ;shift 2 ;;
-S ) echo "-S:$2"; shift 2;;
--) shift; break;;
esac
done
shift 2;;
--prog2 )
echo "similar things as in prog1"; shift
;;
--prog3 )
echo "similar things as in prog1"; shift
;;
--prog4 )
echo "similar things as in prog1"; shift
;;
--prog5 )
echo "similar things as in prog1"; shift
;;
-- )
shift; break;;
esac
done
スクリプトを次のように実行するmy_script --prog1 -d "-f 10 -g 100"
と、-d引数を取得できますが、どういうわけか無限ループになり、同時に他の引数「-f10-g100」を取得できません。
理想的には、スクリプトは次のような呼び出しで実行する必要があります。
my_script --prog1 -d "-f 10 -g 100" -R "-l 2 -m 9" --prog3 -M "-r 9 0.5 6" -F "-o 2 -q- 4" --prog5 .... etc
my_script --prog1 -d "-f 10 -g 100"
。my_script --prog1 -d "-f 10 -g 100" -B --prog3 -F "-o 2 -q- 4"
my_script --prog3 -F "-o 2 -q- 4" -M --prog2 -G
等
この問題を克服する方法について何かアイデアはありますか?
前もって感謝します