Для отладки сценариев можно использовать отладчик Bash .
Более простой вариант — использовать ловушку DEBUG
:
#!/bin/bash
function prompt {
if [[ -n "$BASH_COMMAND" ]]; then
echo About to run \'$BASH_COMMAND\'
read -p 'Continue [Y/n]?' CONT
if [[ "$CONT" = "n" || "$CONT" = "N" ]]; then
echo Exiting prematurely
exit 1
fi
fi
}
trap prompt DEBUG
echo Hello
ls
sleep 10
Это будет запускать функцию prompt
перед каждой командой после установки прерывания, предоставляя вам возможность продолжить или прервать. Строки, начинающиеся с echo Hello
, будут заменены любым вашим сценарием, или, что еще лучше, вы можете сохранить функцию и команду trap
в отдельном скриптлете, который вы source
впишете в скрипт, который хотите отладить.
Есть некоторые тонкости, связанные с ловушкой DEBUG
; во-первых, он не запускает внутренние функции, если только он не был повторно -установлен внутри функции (, поэтому вы можете пропустить функции, которые вы не хотите отлаживать, включая саму функцию prompt
, но вам нужно не забыть запустить trap
внутри функций, которые вы делаете хотите отлаживать ).
Поведение трассировки можно включать и отключать по желанию в вашем скрипте, соответственно, добавляя
trap prompt DEBUG
и
trap "" DEBUG
в зависимости от обстоятельств.