Как параметризовать многословность вывода отладки (BASH)? - PullRequest
1 голос
/ 29 июля 2011

В процессе написания сценария я буду использовать выходные данные команды по-разному и в разной степени - для устранения неполадок в текущей задаче. Например, в этом фрагменте, который читает ресурс значка приложения ивозвращает, имеет ли оно типичное расширение .icns ...

icns=`defaults read /$application/Contents/Info CFBundleIconFile`
    if ! [[ $icns =~ ^(.*)(.icns)$ ]]; then
        echo -e $icns "is NOT OK YOU IDIOT!  **** You need to add .icns to "$icns"."
    else 
        echo -e $icns "\t Homey, it's cool.  That shits got its .icns, proper."
    fi

Неизбежно, так как каждая ошибка сбрасывается, и stdout начинает относиться больше к реальной функции по сравнению с процессом отладки, этообратная связь обычно либо закомментирована, либо отключена, либо удалена - по понятным причинам.

Однако, , если кто-то хочет предоставить простую опцию - либо жестко закодировано, либо передано в качестве параметра, чтобы дополнительно показать некоторые,все или ни одного из "такого рода" сообщений во время выполнения - каков наилучший способ обеспечить эту простую функциональность? Я ищу в основном дублировать функциональность set -x, но вместопострочно, он будет печатать только те уведомления, которые я специально разработал.

Кажетсячрезмерно заменять каждый echo на if, который проверяет на debug=1|0, но я не смог найти краткое объяснение того, как реализовать a getopts / getopt схема (никогда не помню, какая из них встроенная) и т. д. в моих собственных скриптах.Это маленькое выражение казалось многообещающим, но есть очень мало документации: 2>$1 (хотя я уверен, что это ключ к этой загадке)

[ $DBG ] && DEBUG="" || DEBUG='</dev/null'
check_errs() {
    # Parameter 1 is the return code Para. 2 is text to display on failure.
    if [ "${1}" -ne "0" ]; then
        echo "ERROR # ${1} : ${2}"
    else
        echo "SUCESSS  "
    fi }

Любые лаконичные и многократно используемые уловки в этой сделкеменя приветствуют, и если я полностью скучаю по лодке, или если это была змея, и она меня кусала - я прошу прощения.

Ответы [ 2 ]

1 голос
/ 31 июля 2011

Один простой трюк - просто заменить ваш «регистрирующий» эхо-комманд на переменную, например:

TRACE=:
if test "$1" = "-v"; then
    TRACE=echo
    shift
fi

$TRACE "You passed the -v option"

Вы можете иметь любое их количество для различных типов сообщений, если хотите.

0 голосов
/ 27 сентября 2013

вы можете проверить общую библиотеку трассировки с открытым исходным кодом с поддержкой bash.

ЗКО

Arno-Can Uestuensoez

...