Отлов недопустимых опций getopt

Я использую 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 по-прежнему не делает того, что я ожидаю. Вместо этого программа просто выполняется, несмотря на недопустимые аргументы.

13
задан Tom Auger 5 October 2011 в 15:06
поделиться