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


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

cmd > file.txt

Para redirigir stdout en Bash, añadiendo a un archivo, sé que debo usar:

cmd >> file.txt

Para redirigir ambos stdout y stderr a un archivo truncado, sé usar:

cmd &> file.txt

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


1182
2018-05-18 04:19


origen


Respuestas:


cmd >>file.txt 2>&1

Bash ejecuta los redireccionamientos de izquierda a derecha de la siguiente manera:

  1. >>file.txt: Abierto file.txt en modo de adición y redirigir stdout ahí.
  2. 2>&1: Redirigir stderr a "dónde stdout está yendo actualmente ". En este caso, ese es un archivo abierto en el modo de agregar. En otras palabras, el &1 reutiliza el descriptor de archivo que stdout actualmente usa.

1559
2018-05-18 04:23



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

El clásico y portátil (Bash pre-4) camino es:

cmd >> outfile 2>&1

Una forma noportable, empezando por Bash 4 es

cmd &>> outfile

(análogo a &> outfile)

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

  • decida si la portabilidad es una preocupación (luego use la forma clásica)
  • decida si la portabilidad incluso para Bash pre-4 es una preocupación (luego 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 una sintaxis más corta, no presenta ninguna funcionalidad nueva ni nada por el estilo.

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


298
2018-05-18 04:42



En Bash también puede especificar explícitamente sus redireccionamientos a diferentes archivos:

cmd >log.out 2>log_error.out

Anexar sería:

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

76
2017-07-24 18:09



En Bash 4 (así como en ZSH 4.3.11):

cmd &>>outfile

recién salido de la caja


57
2018-03-27 18:24



Esto debería funcionar bien:

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

Almacenará todos los registros en archivo.txt así como volcarlos en la terminal.


32
2017-12-12 06:17



Prueba esto

You_command 1>output.log  2>&1

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

Aquí viene algunos consejos adicionales.

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

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

Cualquier descriptor de archivo se puede redirigir a otro descriptor de archivo o archivo mediante el operador > o >>(adjuntar).

Uso: <file_descriptor> > <nombre del archivo | & file_descriptor>

Por favor haz referencia a http://www.tldp.org/LDP/abs/html/io-redirection.html


19
2018-04-10 05:56