Я пытаюсь сохранить некоторые журналы из функций bash, которые выполняют инструменты (некоторые из них работают в подоболочках). Кроме того, я хотел бы распечатать все ошибки на терминале.
Мой код приводит к sigpipe и коду выхода 141 при нажатии ctr-c плюс странный файл журнала. Сбой канала, по-видимому, вызван перенаправлением stdout на stderr внутри ловушки, что прерывает поток stdout команды tee. Интересно, что код завершается, как и ожидалось, с кодом выхода 130 без перенаправления, используемого в ловушке или команде cat
.
Я все еще не могу исправить и объяснить полученный файл журнала. Почему некоторые эхо-сигналы повторяются дважды и почему эхо-ловушки также записываются в файл?
Почему sigpipe не вызывается ранее перенаправлением внутри функции?
trap '
echo trap_stdout
echo trap_stderr >&2
' INT
fun(){
echo fun_stdout
echo fun_stderr >&2
( sleep 10 | cat )
}
echo > log
fun >> log 2> >(tee -a log)
журнальный файл
fun_stdout
fun_stderr
fun_stderr
trap_stdout
РЕДАКТИРОВАТЬ: рабочий пример в соответствии с ответом oguz ismail
exec 3>> log
exec 4> >(tee -ai log >&2)
fun 2>&4 >&3
exec 3>&-
exec 4>&-