Я работаю над ужасным проектом. В фоновом режиме используется множество беспорядочных сценариев оболочки. Скрипт может включать некоторые другие скрипты. И многие сообщения об ошибках были перенаправлены в / dev / null. Если сценарий не выполняется успешно, я могу использовать echo $?
чтобы увидеть код ошибки, но я не могу знать, какая команда вернула этот код ошибки.
Эти скрипты есть. Я не хочу проверять весь код и добавлять дополнительный код для щадящей обработки ошибок. Теперь у меня есть два вопроса:
Пытаться
bash -x /my/script
для печати каждой строки сценария по мере его выполнения.
Не можете запустить такой сценарий? Вы также можете добавить его в шебанг в первой строке файла.
#!/usr/bin/bash -x
Как сказал Майкл, а также я часто использую при проверке ошибок для сценариев bash $ LINENO - каждый раз, когда указывается этот параметр, оболочка заменяет десятичное число, представляющее текущий порядковый номер строки (начиная с 1) в сценарии.
Итак, после определенной команды я бы сделал:
if [ $? = 0 ]; then
echo "Command "Foo" finished successfully."
else
echo "Error occurred on line $LINENO in command "Foo" with exit status $?"
fi
Что-то вроде этого. Надеюсь это поможет.