Отладка в bash
Можно выполнить полную проверку синтаксиса w/:
Технически это означает “читать команды, но не выполнять” (help set
). В этом режиме bash не сообщит об ошибках времени выполнения, неправильной логике, неверных параметрах внешних команд и т.п. Но все равно он укажет на непарные кавычки и скобки, неправильный синтакис built-in функций bash и т.д.
bash -x
(xtrace) выводит команды и их агрументы по мере выполнения. Трассировку xtrace можно включить и в середине скрипта командой set +x
.
Вывод содержимого окружения
Cодержимое окружения полезно логировать при запуске сценария из cron, в системе непрерывной интеграции и в других случаях, когда окружение может измениться или отличаться от ожидаемого.
Для этого часто используются внешние команды env и printenv, но built-in команда set может дать больше информации, включая сведения о функциях. С другой стороны, set выводит много лишних подробностей, поэтому выбор за тобой.
Опасность утечки информации об окружении
Содержимое окружения часто содержит конфиденциальную инфу (username, пароли, ключи API и т.д.).
Чтобы предотвратить вывот такой инфы, юзай однострочники sed или Perl:
Начиная с bash 3.0 поддерживает флаг --debugger
и возможность расширенной отладки shopts
. Но обычно хватает команды set -x
.
Запуск bash --debugger - / path/to/script
может привести к следующему результату:
/path/to/script: /usr/share/bashdb/bashdb-main.inc: No such file or directory
/path/to/script: warning: cannot start debugger; debugging mode disabled
Если увидишь это сообщение, иди на сайт проекта Bash Debugger Project1 , в рамках которого разрабатывается “отладчик исходного кода для bash, следующий синтаксису команды gdb”. Проблема может быть обусловлена несовместимостью с версией bash.
Соус: Книга “Идиомы Bash” ⇒ Глава 10. “Помимо идиом: работа с bash” ⇒ “Отладка в bash”