опции сценария оболочки передают до подкоманды

Можно сохранить соответствие списку файлов и grep только при соответствии файлам. Это будет намного быстрее. Например, можно использовать find + grep :

find . -type f -exec grep -l 'PATTERN' {} \+ | xargs grep -H -C 3 'PATTERN'

Если необходимо видеть grep вывод после первого показа в find это немного более твердо, но все еще довольно легко. Вы просто должны использовать что-то как этот

find -exec grep -H 'PATTERN' {} \+ | tee -a out.log |\
sed 's/^[^:]*://' | sort -u | xargs grep -C 3  'PATTERN'

И вывод будет сохранен в файл out.log.

3
31.05.2013, 13:53
2 ответа

Одно обходное решение было бы:

... -o "x--no-create-db --replace"

# in the script:
option="${option#x}"

Как правило: необходимо заключить все в кавычки (который может быть заключен в кавычки).

0
27.01.2020, 21:24

Если указать, что -- отмечает конец опций и все последующие аргументы будут переданы в подкоманду, то можно сделать что-то подобное, что можно найти в man getopts:

       aflag=
       bflag=
       while getopts ab: name
       do
           case $name in
           a)    aflag=1;;
           b)    bflag=1
                 bval="$OPTARG";;
           ?)   printf "Usage: %s: [-a] [-b value] args\n" $0
                 exit 2;;
           esac
       done
       if [ ! -z "$aflag" ]; then
           printf "Option -a specified\n"
       fi
       if [ ! -z "$bflag" ]; then
           printf 'Option -b "%s" specified\n' "$bval"
       fi
       shift $(($OPTIND - 1))
       printf "Remaining arguments are: %s\n$*"

Конкретно я имею в виду самый конец - getopts останавливает обработку опций при столкновении с --, поэтому все эти аргументы останутся в $@. В примере выше все аргументы getopts обрабатываются следующим образом: сдвиг ed, а остальные распечатываются сразу как $*. При аналогичной обработке можно выполнить следующую работу:

/mysqldumpwrapper.sh \
    -u username \
    -p password \
    -h localhost \
    -- \
    -now --all of these --are passed through

И вызвать обёрнутое приложение:

mysqldump "$@" \
    --host=$MYSQL_HOST \
    --user=$MYSQL_USER \
    --password=$MYSQL_PASS "$DB" \
> "$FILE_DEST"
3
27.01.2020, 21:24

Теги

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