2012-11-27 11 views

risposta

74

Sì, se si reindirizza l'output, non verrà visualizzato sulla console. Utilizzare tee.

ls 2>&1 | tee /tmp/ls.txt 
+0

Fa scrivere stderr e stdout sia ?? – Satish

+2

In questo caso l'errore viene unito all'output ('2> & 1'), quindi il prossimo processo che consuma la pipe vedrà entrambi come input regolare (in breve: sì). –

+0

Come aggiungo i log usando tee? – Satish

9

Nel caso in cui qualcuno ha bisogno di aggiungere l'output e non override, è possibile usare "-a" o "--append" l'opzione di comando "tee":

ls 2>&1 | tee -a /tmp/ls.txt 
ls 2>&1 | tee --append /tmp/ls.txt 
+1

Mi piace ... funziona su Mac senza problemi –

17

E ' vale la pena ricordare che 2> & 1 significa che anche l'errore standard verrà reindirizzato insieme all'output standard. Quindi

someCommand | tee someFile 

fornisce solo lo standard output nel file, ma non l'errore standard: l'errore standard verrà visualizzato solo in console. Per ottenere errore standard nel file troppo, è possibile utilizzare

someCommand 2>&1 | tee someFile 

(fonte: In the shell, what is " 2>&1 "?). Infine, entrambi i comandi sopra menzionati tronceranno il file e si apriranno. Se si utilizza una sequenza di comandi, è possibile che venga visualizzato l'errore & di tutti, uno dopo l'altro. In questo caso è possibile utilizzare -a bandiera a comando "tee":

someCommand 2>&1 | tee -a someFile 
Problemi correlati