Invia copia dell'output di uno script in un file


10

Supponiamo che io abbia uno script Zsh e che vorrei lasciarlo stampare l'output STDOUT, ma anche copiare (dump) il suo output su un file sul disco.

Inoltre, lo script inizia con la seguente opzione

set -o xtrace

che lo costringe a essere prolisso e stampare i comandi che esegue. Vorrei catturare anche questo output in un file su disco.

La mia comprensione è che se lo faccio

./my_script.sh > log.txt

invierà semplicemente STDOUTa log.txt, ma cosa succede se voglio anche essere in grado di vedere l'output nel terminale?

Ho letto teee l' MULTIOSopzione in Zsh, ma non sono sicuro di come usarli.

Quando io faccio:

./my_script | tee log.txt

Posso vedere l'output sul terminale, ma il file non log.txtsembra catturare tutto (in realtà cattura quasi nulla).


./my_script.sh > log.txt 2>&1
Mikeserv,

Sembra che tu stia cercando il scriptcomando. O forsemyscript >&1 > log.txt 2>&1
Stéphane Chazelas,

Risposte:


12

È possibile che il tuo script stia producendo output su stdoute stderr, e tu stia ottenendo solo uno di quei flussi di output sul tuo file di registro.

./my_script.sh | tee log.txtprodurrà effettivamente tutto sul terminale, ma eseguirà solo il dump stdoutnel file di registro.

./my_script.sh > log.txt 2>&1 farà il contrario, scaricando tutto sul file di registro, ma senza visualizzare nulla sullo schermo.

Il trucco è combinare i due con tee:

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

Questo redirect stderr( 2) in stdout( 1), poi i tubi stdoutin tee, che copia al terminale e nel file di registro.

L' zshequivalente multios sarebbe:

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

Cioè, reindirizzare stdout sia allo stdout originale sia a log.txt (internamente tramite una pipe a qualcosa che funziona in modo simile tee), quindi reindirizzare anche stderr a quello (alla pipe al teeprocesso interno simile).


Grazie - Per quanto riguarda la tua ultima riga, perché no ./myscript.sh >&1 2>&1 > log.txt? (ovvero cambiando l'ordine degli ultimi due reindirizzamenti). Ci sarebbe qualche differenza tra loro?
Amelio Vazquez-Reina,

La tua variante non viene riprodotta su stdout, solo su log.txt. L'ultima riga della risposta (aggiunta da @ StéphaneChazelas e non da me stessa) esce ad entrambi.
Savanto,

0

nohup consente a un lavoro di continuare anche se la console muore o è chiusa, utile per lunghi backup ecc., ma qui stiamo usando la sua registrazione automatica.

nohup myscript.sh & ; tail -f nohup.out
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.