Como copiar saída padrão e erro padrão para o log?

2

Eu preciso escrever o erro padrão e a saída padrão para $LOG , além de tê-los impressos no console, a partir de um script.

O script tem muitos comandos, portanto redirecionar cada um deles não é uma boa solução.

Eu tentei isso, mas não funcionou como esperado:

#!/bin/bash

LOG=/var/tmp/log

#...

exec > $LOG  2>&1

Meu alvo é escrever para $LOG em qualquer saída padrão e erro padrão, mas ao mesmo tempo também para a saída padrão (no console). É possível?

    
por yael 03.08.2017 / 12:55

2 respostas

1

Use tee . Por exemplo:

command 2>&1 | tee file.txt

Que executa command redirecionando SDTERR para SDTOUT. tee copia STDIN para ambos os STDOUT e para o arquivo file.txt .

No bash você pode usar substituição de processos da seguinte maneira para copiar a saída para $LOG :

exec &> >(tee $LOG)

No entanto, este bashism não funcionará em outros shells.

    
por 03.08.2017 / 13:05
0

Não tenho certeza se essa é a solução mais limpa, mas funcionou para mim:

#!/bin/bash

LOG=/var/tmp/log

(
# lots of commands
# ...

) 2>&1 | tee $LOG

@sebasth deu uma solução melhor:

#!/bin/bash

LOG=/var/tmp/log

exec &> >(tee $LOG)

#...
    
por 03.08.2017 / 14:40