2011-09-23 17 views
234

Sono in esecuzione di uno script bash che crea un file di registro per l'esecuzione del comandoCome reindirizzare sia stdout e stderr in un file

Io uso il seguente

Command1 >> log_file 
Command2 >> log_file 

Questo invia solo lo standard uscita e non l'errore standard che appare sul terminale.

Posso registrare sia lo stderr che lo stdout registrati in un file?

risposta

349

Se si desidera accedere allo stesso file:

command1 >> log_file 2>&1 

Se desidera file diversi:

command1 >> log_file 2>> err_file 
+98

E proprio per salvare qualcun altro la frustrazione, si noti che l'ordine è importante: '2> & 1' deve verificarsi dopo' >> log_file'. – Rufflewind

+4

Perché '>>' e non '>'? – user3527975

+5

'>>' aggiunge al file, '>' sovrascrive. Cerca "reindirizzamento della shell" per maggiori dettagli. – Mat

26

Si può fare così 2> & 1:

command > file 2>&1 
+12

+1, '2> & 1' redirige descrittore di file 2 (stderr) al descrittore di file 1 (stdout) – Sjoerd

4

Usa:

command >>log_file 2>>log_file 
159

La sintassi più semplice per reindirizzare entrambi è:

command &> logfile 

Se si vuole aggiungere al file invece di sovrascrittura:

command &>> logfile 
+3

Non sicuro quando questo operatore è stato aggiunto ma potrebbe non essere disponibile nelle versioni precedenti di Bash. Sembra che funzioni sulla mia macchina che esegue Gnu bash v3.2.48. –

+7

@CostiCiudatu l'operatore & >> non sembra funzionare in Mac OS X; più sicuro usare la soluzione di Mat imo. –

+4

@JamesFennell Hai ragione, non ne ero a conoscenza. Ho upvoted la risposta accettata :) –

1

Si prega di utilizzare command 2>file Qui 2 sta per descrittore di file di stderr. È inoltre possibile utilizzare al posto di 12 in modo che stdout viene reindirizzato al 'file'

Problemi correlati