Я использую getopt
(не getops
), чтобы обеспечить возможность для моего сценария bash обрабатывать опции и переключатели (как длинные --option, так и короткие -o).
Я хотел бы иметь возможность отлавливать недопустимые опции и обрабатывать их, обычно выдавая эхо, что пользователю следует попробовать cmd --help
, а затем завершить сценарий.
Дело в том, что недопустимые опции отлавливаются getopt, который сам выводит сообщение типа "getopt: invalid option -- '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
по-прежнему не делает того, что я ожидаю. Вместо этого программа просто выполняется, несмотря на недопустимые аргументы.