Назад | Перейти на главную страницу

Как получить последнюю ошибку bash

Я работаю над ужасным проектом. В фоновом режиме используется множество беспорядочных сценариев оболочки. Скрипт может включать некоторые другие скрипты. И многие сообщения об ошибках были перенаправлены в / dev / null. Если сценарий не выполняется успешно, я могу использовать echo $? чтобы увидеть код ошибки, но я не могу знать, какая команда вернула этот код ошибки.

Эти скрипты есть. Я не хочу проверять весь код и добавлять дополнительный код для щадящей обработки ошибок. Теперь у меня есть два вопроса:

  1. Можно ли напечатать последнюю команду bash с аргументами, которая не была выполнена успешно?
  2. Как жить с таким запутанным кодом сценария оболочки?

Пытаться

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

Что-то вроде этого. Надеюсь это поможет.