Eu quero ver a saída de um comando no terminal como se não houvesse redirecionamento. Além disso, o stderr precisa ser redirecionado para err.log e o stdout precisa ser redirecionado para o stdout.log.
Seria bom também ter a cópia exata do que é mostrado no terminal, ou seja, erros impressos como e quando ocorrem, em um arquivo separado: stdouterr.log.
bash
logs
io-redirection
balki
fonte
fonte
Respostas:
Use o
tee
comando da seguinte maneira:3>&1 1>&2 2>&3
é assim que você troca stderr e stdout, porque tee só pode aceitar stdout.Dê uma olhada no comando tee do Unix para redirecionamentos mais avançados usando
tee
.fonte
cmd
por(cmd ; echo >exit_code.txt $?)
.((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log)
Acho que registrar stdout e stderr em dois arquivos diferentes é uma ideia esplêndida. Não torna os logs assíncronos? Então, tentei o seguinte:
((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log) &> all.log
em outro terminal
fonte
&| tee all.log
no final do comando em vez de&> all.log
&|
. Eu também entendo&>
,|&
mas o que&|
significa nesse contexto? Não consegui encontrar uma referência de sintaxe adequada, nem na rede, nem mesmo consultando a página de manual do bash "bash (1)" ... Tx|&
@dogbane, Obrigado.
Também encontrei outra maneira que salva os fluxos aproximadamente na ordem em que seriam impressos sem redirecionamento.
command 2> >(tee errlog | tee -a bothLog > /dev/tty ) | tee outlog | tee -a bothLog
Mas isso funciona apenas com os shells que suportam a substituição do processo.
fonte
tente isto:
fonte