2011-09-23 9 views
234

estoy corriendo un script bash que crea un archivo de registro para la ejecución del comandoCómo redirigir stdout y stderr a un archivo

utilizo el siguiente

Command1 >> log_file 
Command2 >> log_file 

Esto sólo envía la norma salida y no el error estándar que aparece en el terminal.

¿Puedo registrar tanto el stderr como el stdout registrados en un archivo?

Respuesta

349

Si desea iniciar sesión en el mismo archivo:

command1 >> log_file 2>&1 

Si querer archivos diferentes:

command1 >> log_file 2>> err_file 
+98

Y sólo para guardar Alguien más la frustración, tenga en cuenta que el orden es importante: '2> & 1' debe ocurrir después de' >> archivo_registro'. – Rufflewind

+4

¿Por qué '>>' y no '>'? – user3527975

+5

'>>' se agrega al archivo, '>' sobrescribe. Busque "redirección de shell" para más detalles. – Mat

26

Puede hacerlo así 2> & 1:

command > file 2>&1 
+12

1, '2> & 1' redirige descriptor de archivo 2 (stderr) para presentar el descriptor 1 (stdout) – Sjoerd

159

La sintaxis más simple para redirigir tanto es:

command &> logfile 

Si desea anexar al archivo en lugar de sobrescribir:

command &>> logfile 
+3

No estoy seguro de cuándo se agregó este operador, pero es posible que no esté disponible en versiones anteriores de Bash. Parece que está trabajando en mi máquina que ejecuta Gnu bash v3.2.48. –

+7

@CostiCiudatu El operador & >> no parece funcionar en Mac OS X; más seguro para usar la solución de Mat imo. –

+4

@JamesFennell Tienes razón, no estaba al tanto de eso. Volví a subir la respuesta aceptada :) –

1

Utilice command 2>file Aquí 2 representa el descriptor de archivo de stderr. También se puede utilizar en lugar de 12 de manera que la salida estándar se le redirecciona a la 'archivo'

Cuestiones relacionadas