Я хочу видеть вывод команды в терминале, как если бы не было перенаправления. Кроме того, stderr необходимо перенаправить на err.log, а stdout - на stdout.log.
Было бы также неплохо иметь точную копию того, что отображается в терминале, т.е. ошибки, напечатанные как и когда это происходит, в отдельном файле: stdouterr.log.
bash
logs
io-redirection
Балки
источник
источник
Ответы:
Используйте
tee
команду следующим образом:3>&1 1>&2 2>&3
это то, как вы меняете stderr и stdout, потому что tee может принимать только stdout.Взгляните на команду Unix tee для более продвинутого использования перенаправлений
tee
.источник
cmd
на(cmd ; echo >exit_code.txt $?)
.((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log)
Я думаю, что запись stdout и stderr в два разных файла - отличная идея. Разве это не делает журналы асинхронными? Поэтому я опробовал следующее:
((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log) &> all.log
в другом терминале
источник
&| tee all.log
на конце команды вместо&> all.log
&|
. Я тоже понимаю&>
,|&
но что&|
значит в этом контексте? Я не смог найти подходящую ссылку на синтаксис, не в сети, даже не обращаясь к странице руководства bash "bash (1)" ... Tx|&
@ Dogbane, спасибо.
Я также нашел другой способ, который сохраняет оба потока примерно в том порядке, в котором они будут напечатаны без перенаправления.
command 2> >(tee errlog | tee -a bothLog > /dev/tty ) | tee outlog | tee -a bothLog
Но это работает только с оболочками, которые поддерживают процесс замены.
источник
попробуй это :
источник