У меня есть код вида:
trap 'error ${LINENO} ${BASH_COMMAND}' ERR
Я хочу захватить сообщение об ошибке вместе с этим. Есть ли какая-нибудь встроенная переменная для печати сообщения об ошибке?
Обработка ошибок в сценариях оболочки довольно проста. Единственными стандартными способами обнаружения любого вида проблемы являются код возврата команды (не -ноль в случае ошибки )и вывод содержимого в стандартная ошибка (. дескриптор файла 2 ). Стандартная ошибка по умолчанию будет напечатана на вашем терминале. Если вам нужно передать его в error
, например, потому что сообщения об ошибках тонут в другом выводе, вы можете, например, заменить текущую оболочку на ту, которая сохраняет стандартную ошибку во временный файл:
trap 'rm -f "${stderr_output_file}"' EXIT
stderr_output_file="$(mktemp)"
exec 2>"${stderr_output_file}"
[the rest of your program]