2010-03-12 13 views

risposta

11

annotate-output, da Debian 's devscripts, fa questo.

L'esempio nella sua pagina man:

 
$ annotate-output make 
21:41:21 I: Started make 
21:41:21 O: gcc -Wall program.c 
21:43:18 E: program.c: Couldn't compile, and took me ages to find out 
21:43:19 E: collect2: ld returned 1 exit status 
21:43:19 E: make: *** [all] Error 1 
21:43:19 I: Finished with exitcode 2 
+1

ha scelto questa risposta perché è meglio preservare l'ordine, anche se è necessario scaricare l'output tutto il tempo ... –

10

Prova questo:

(myCommand | sed s/^/stdout:/ >> myLogfile) 2>&1 | sed s/^/stderr:/ >> myLogFile 

Il primo tubo inserisce un prefisso stdout: all'uscita standard myCommand e lo aggiunge myLogFile.

Le parentesi sono utilizzate per eseguire un comando singolo di tutto ciò. Dicono che ulteriori reindirizzamenti si applicano a ciò che è racchiuso tra parentesi e non solo a sed.

Quindi l'errore standard viene reindirizzato all'output standard con 2>&1 (ricordare che l'output standard originale è già stato reindirizzato a myLogFile). Il secondo tubo inserisce un prefisso stderr: e lo aggiunge a myLogFile.

+0

ho brancolava la mia strada verso questo, ma il vostro è molto più pulito. –

+0

puoi approfondire quella risposta? penso di capirlo, eccetto per le parentesi ... –

+0

Per comodità, '2> & 1 |' può essere scritto come '| &' in Bash 4 o zsh. È un po 'simmetrico a '&> file' o'> & file' che sono scorciatoie per '> file 2> & 1'. – ephemient

Problemi correlati