Envie uma cópia da saída de um script para um arquivo

9

Digamos que eu tenha um script Zsh e que eu queira deixá-lo imprimir a saída para STDOUT , mas também copiar (despejar) sua saída para um arquivo no disco.

Além disso, o script começa com a seguinte opção

set -o xtrace

que o obriga a ser detalhado e imprimir quais comandos ele executa. Eu gostaria de capturar essa saída também em um arquivo no disco.

Meu entendimento é que, se eu fizer

./my_script.sh > log.txt

ele só enviará STDOUT para log.txt , mas e se eu quiser também ver a saída no terminal?

Eu li sobre tee e o MULTIOS opção no Zsh, mas não tenho certeza de como usá-los.

Quando faço:

./my_script | tee log.txt

Eu posso ver a saída no terminal, mas o arquivo log.txt não parece estar capturando tudo (na verdade, ele captura quase nada).

    
por Amelio Vazquez-Reina 05.06.2014 / 21:37

2 respostas

10

Pode ser que o seu script esteja produzindo a saída para stdout e stderr , e você só está obtendo uma dessas saídas de fluxo para o seu arquivo de registro.

./my_script.sh | tee log.txt , de fato, emitirá tudo para o terminal, mas só enviará stdout para o arquivo de log.

./my_script.sh > log.txt 2>&1 fará o oposto, descartando tudo no arquivo de log, mas exibindo nada na tela.

O truque é combinar os dois com tee :

./myscript.sh 2>&1 | tee log.txt

Isso redireciona stderr ( 2 ) para stdout ( 1 ) e, em seguida, canaliza stdout para tee , que copia para o terminal e para o log arquivo.

O zsh multios equivalente seria:

./myscript.sh >&1 > log.txt 2>&1

Ou seja, redirecione o stdout para o stdout original e log.txt (internamente por meio de um canal para algo que funciona como tee ) e, em seguida, redirecione stderr para esse também (para o canal para o% internotee semelhante ao processo).

    
por 06.06.2014 / 01:36
0

nohup permite que um trabalho continue mesmo se o console morrer ou estiver fechado, útil para backups demorados, etc., mas aqui estamos usando seu registro automático.

nohup myscript.sh & ; tail -f nohup.out
    
por 06.12.2016 / 11:27