2010-03-12 9 views

Respuesta

11

annotate-output, desde Debiandevscripts, hace esto.

El ejemplo en su página de manual:

 
$ 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

eligió esta respuesta porque es mejor para preservar el orden, aunque tiene que estar limpiando la salida todo el tiempo ... –

10

Prueba esto:

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

El primer tubo inserta un prefijo stdout: a la salida estándar de myCommand y lo anexa a myLogFile.

Los paréntesis se usan para hacer un único comando de todo eso. Dicen que se aplican más redirecciones a lo que está entre paréntesis y no a sed solamente.

Entonces error estándar es redirigido a la salida estándar con 2>&1 (recordemos que la salida estándar original ya ha sido redirigida a un myLogFile). La segunda tubería inserta un prefijo stderr: y lo agrega al myLogFile.

+0

que buscaba a tientas mi camino hacia este, pero el suyo es mucho más limpio. –

+0

¿puedes dar más detalles sobre esa respuesta? Creo que lo entiendo, excepto por los paréntesis ... –

+0

Para mayor comodidad, '2> & 1 |' se pueden escribir como '| &' en Bash 4 o zsh. Es algo simétrico a '&> file' o'> & file' que son atajos para '> file 2> & 1'. – ephemient

Cuestiones relacionadas