Как анализировать аргументы командной строки с произвольной строкой

rpmbuild добавляет требования Python автоматически из используемой версии python. Таким образом, он добавлял python(abi)=2.7 в список требований RPM. Однако, при использовании python27, который использовал scl, в список требований добавлялся python27-python. Проблема была решена путем добавления строки

AutoReqProv: no

в файл spec в RPM. После этого машине, на которой был установлен rpm, не нужно было проверять требование python(abi), и вместо этого она проверяла, что python27-python был предоставлен.

3
19.09.2016, 19:58
1 ответ

Просто обращайтесь с ним, как с другими, которые принимают аргумент ( изображение и версия ). т.е. добавьте двоеточие, обозначающее обязательный аргумент, в строку опций, которая идет к getopt, и выберите значение из $ 2 .

Я думаю, что ошибка возникает из-за getopt , поскольку не сказано, что options принимает аргумент, и поэтому он пытается интерпретировать - build-arg ARG = значение как длинный вариант (начинается с двойного тире).

$ cat opt.sh
#!/bin/bash
params="$(getopt -o hv: -l help,options:,version: --name "$0" -- "$@")"
eval set -- "$params"

while [[ $# -gt 0 ]] ; do
    case $1 in
        -h|-\?|--help)
            echo "help"
            ;;
        -v|--version)            
            if [ -n "$2" ]; then
                echo "version: <$2>"
                shift
            fi
            ;;
        --options)            
            if [ -n "$2" ]; then
                echo "options: <$2>"
                shift
            fi
            ;;
    esac
    shift
done

$ bash opt.sh --version 123 --options blah --options "foo bar"
version: <123>
options: <blah>
options: <foo bar>
5
27.01.2020, 21:15

Теги

Похожие вопросы