linux - salida - ¿Cómo puedo redirigir y anexar stdout y stderr a un archivo con Bash?
tuberias y filtros en linux (6)
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í.
En Bash 4 (así como ZSH 4.3.11):
cmd &>>outfile
recién salido de la caja
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
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.
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
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:
-
>>file.txt
: abrefile.txt
en modo de adición y redirigestdout
allí. -
2>&1
: Redirigestderr
a "a dondestdout
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 questdout
usa actualmente.