Я пишу сценарий BASH, и две вещи, которые мне нужны, это:
- Предоставить файл журнала с меткой времени.
- Обработать ошибки.
Я обнаружил, что эти две цели противоречат друг другу.
Прежде всего, я использую команду ts
для отметки времени записей журнала, например <a command/subscript> 2>&1 | ts '%H:%M:%S ' >> log
. Обратите внимание, что мне нужно, чтобы все строки вывода любых индексов также имели временные метки. Это прекрасно работает ... пока я не попытаюсь обрабатывать ошибки с помощью кодов выхода.
За любой неудачной командой (завершается с кодом 1) немедленно следует команда ts
, которая выполняется успешно (завершается с код 0). Это означает, что я не могу использовать коды выхода команд для обработки ошибок с переменной среды $?
, потому что ts
всегда является последней выполняемой командой и всегда имеет код выхода 0.
Вот оператор case, который я использую:
<command> 2>&1 | ts '%H:%M:%S ' >> log
case $? in
0)
echo "Success"
;;
*)
echo "Failure"
esac