linux ¿a - ¿Cómo puedo redirigir y anexar stdout y stderr a un archivo con Bash?




envían comandos? (6)

Esto debería funcionar bien:

your_command 2>&1 | tee -a file.txt

Almacenará todos los registros en file.txt , así como también los volcará en el terminal.

Para redireccionar stdout a un archivo truncado en Bash, sé usar:

cmd > file.txt

Para redirigir la salida estándar en Bash, agregando a un archivo, sé usar:

cmd >> file.txt

Para redirigir tanto stdout como stderr a un archivo truncado, sé usar:

cmd &> file.txt

¿Cómo redirecciono stdout y stderr adjuntando a un archivo? cmd &>> file.txt no funcionó para mí.


Prueba esto

You_command 1>output.log  2>&1

Su uso de &> x.file funciona en bash4. lo siento por eso : (

Aquí vienen algunos consejos adicionales.

0, 1, 2 ... 9 son descriptores de archivo en bash.

0 significa stdin , 1 significa stdout , 2 significa stderror . 3 ~ 9 es repuesto para cualquier otro uso temporal.

Cualquier descriptor de archivo puede ser redirigido a otro descriptor de archivo o archivo usando operador > o >> (agregar).

Uso: < file_descriptor >> < filename | & file_descriptor >

Consulte http://www.tldp.org/LDP/abs/html/io-redirection.html


cmd >>file.txt 2>&1

Bash ejecuta las redirecciones de izquierda a derecha de la siguiente manera:

  1. >>file.txt : abre file.txt en modo de adición y redirige stdout allí.
  2. 2>&1 : Redirige stderr a "a donde stdout está stdout actualmente" . En este caso, se trata de un archivo abierto en modo de adición. En otras palabras, el &1 reutiliza el descriptor de archivo que stdout usa actualmente.

Hay dos formas de hacerlo, dependiendo de su versión de Bash.

La forma clásica y portátil ( Bash pre-4 ) es:

cmd >> outfile 2>&1

Una forma no portátil, comenzando con Bash 4 es

cmd &>> outfile

(analógico a &> outfile )

Para un buen estilo de codificación, deberías

  • Decida si la portabilidad es una preocupación (entonces use la forma clásica)
  • Decidir si la portabilidad incluso a Bash pre-4 es una preocupación (entonces use la forma clásica)
  • no importa qué sintaxis use, no la cambie dentro del mismo script (¡confusión!)

Si su script ya comienza con #!/bin/sh (no importa si está previsto o no), entonces la solución Bash 4, y en general cualquier código específico de Bash, no es el camino a seguir.

También recuerda que Bash 4 &>> es solo una sintaxis más corta, no introduce ninguna funcionalidad nueva ni nada de eso.

La sintaxis es (junto con otra sintaxis de redirección) que se describe aquí: http://bash-hackers.org/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output


En Bash también puedes especificar explícitamente tus redirecciones a diferentes archivos:

cmd >log.out 2>log_error.out

Anexar sería:

cmd >>log.out 2>>log_error.out





linux bash redirect stream pipe