Para redirigir stdout a un archivo truncado en Bash, sé usar:
cmd > file.txt
Para redirigir stdout en Bash, agregando a un archivo, sé usar:
cmd >> file.txt
Para redirigir stdout y stderr a un archivo truncado, sé usar:
cmd &> file.txt
¿Cómo redirijo stdout y stderr anexando a un archivo? cmd &>> file.txt
no funciono para mi
Respuestas:
Bash ejecuta las redirecciones de izquierda a derecha de la siguiente manera:
>>file.txt
: Abrirfile.txt
en modo agregar y redirigirstdout
allí.2>&1
: Redireccionarstderr
a "a dóndestdout
va actualmente" . En este caso, ese es un archivo abierto en modo anexar. En otras palabras,&1
reutiliza el descriptor de archivo questdout
usa actualmente.fuente
cmd >>file1 2>>file2
deberías lograr lo que quieres.Hay dos formas de hacer esto, dependiendo de su versión de Bash.
La forma clásica y portátil ( Bash pre-4 ) es:
Una forma no portátil, comenzando con Bash 4 es
(análogo a
&> outfile
)Para un buen estilo de codificación, debes
Si su script ya comienza con
#!/bin/sh
(sin importar si fue intencionado 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 recuerde que Bash 4
&>>
es una sintaxis más corta: no introduce ninguna funcionalidad nueva ni nada por el estilo.La sintaxis es (además de otra sintaxis de redirección) descrita aquí: http://bash-hackers.org/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output
fuente
sh
. Puede cambiar el shell predeterminado anteponiendoSHELL=/bin/bash
alcrontab -e
archivo.En Bash también puede especificar explícitamente sus redireccionamientos a diferentes archivos:
Anexar sería:
fuente
cmd >log.out 2>&1
. Estoy editando mi respuesta para eliminar el primer ejemplo.En Bash 4 (así como ZSH 4.3.11):
recién salido de la caja
fuente
Esto debería funcionar bien:
Almacenará todos los registros en file.txt y los volcará en la terminal.
fuente
Prueba esto
Su uso de &> x.file funciona en bash4. lo siento por eso : (
Aquí vienen algunos consejos adicionales.
0, 1, 2 ... 9 son descriptores de archivos en bash.
0 representa
stdin
, 1 representastdout
, 2 representastderror
. 3 ~ 9 es de repuesto para cualquier otro uso temporal.Cualquier descriptor de archivo se puede redirigir a otro descriptor de archivo o archivo mediante el operador
>
o>>
(agregar).Uso: < file_descriptor > > < nombre de archivo | & file_descriptor >
Por favor refiérase a http://www.tldp.org/LDP/abs/html/io-redirection.html
fuente
You_command
stdout y el stdout deYou_command
al archivooutput.log
. Además, no se agregará al archivo pero lo sobrescribirá.1 > output.log 2>&1
Me sorprende que en casi diez años, nadie haya publicado este enfoque todavía:
Si usa versiones anteriores de bash donde
&>>
no está disponible, también puede hacer:Esto genera un subshell, por lo que es menos eficiente que el enfoque tradicional
cmd >> file.txt 2>&1
y, en consecuencia, no funcionará para los comandos que necesitan modificar el shell actual (por ejemplocd
,pushd
), pero este enfoque me parece más natural y comprensible:Además, los paréntesis eliminan cualquier ambigüedad de orden, especialmente si desea canalizar stdout y stderr a otro comando.
fuente
cmd >> file 2>&1
funciona en todos los shells y no necesita un proceso adicional para ejecutarse.