getopt
(not ) を使用getops
して、bash スクリプトがオプションとスイッチ (長い --option と短い -o 形式の両方) を処理できるようにしています。
無効なオプションをトラップして処理できるようにしたいと考えています。通常、ユーザーが試しcmd --help
てからスクリプトを終了する必要があることをエコーアウトします。
問題は、無効なオプションが getopt によってキャッチされ、それ自体が「getopt: 無効なオプション -- 'x'」などのメッセージを出力しているということです。
getopt パラメータを設定するために使用しているパターンは次のとおりです。
set -- $(getopt -o $SHORT_OPTIONS -l $LONG_OPTIONS -- "$@")
ここで、$LONG_OPTIONS と $SHORT_OPTIONS は両方とも、オプションのコンマ区切りリストです。
オプションの処理方法は次のとおりです。
while [ $# -gt 0 ]
do
case "$1" in
-h|--help)
cat <<END_HELP_OUTPUT
Help
----
Usage: ./cmd.sh
END_HELP_OUTPUT
shift;
exit
;;
--opt1)
FLAG1=true
shift
;;
--opt2)
FLAG2=true
shift
;;
--)
shift
break
;;
*)
echo "Option $1 is not a valid option."
echo "Try './cmd.sh --help for more information."
shift
exit
;;
esac
done
getopt -q
case
出力を抑制しますが、ステートメント内のトラップスキームはまだ期待どおりに機能しません。代わりに、無効な引数にもかかわらず、プログラムは実行されます。