Sé que en Linux, para redirigir la salida de la pantalla a un archivo, puedo usar el >
o el tee
. Sin embargo, no estoy seguro de por qué parte de la salida todavía se envía a la pantalla y no se escribe en el archivo.
¿Hay alguna manera de redirigir todo el resultado al archivo?
Esa parte está escrita en stderr, use 2>
para redirigirla. Por ejemplo:
foo > stdout.txt 2> stderr.txt
o si quieres en el mismo archivo:
foo > allout.txt 2>&1
Nota: esto funciona en (ba) sh, revisa tu shell para ver la syntax correcta
Todos los sistemas operativos POSIX tienen 3 flujos : stdin, stdout y stderr. stdin es la entrada, que puede aceptar stdout o stderr. stdout es el resultado primario, que se redirige con >
, >>
o |
. stderr es la salida de error, que se maneja por separado para que ninguna excepción se pase a un comando o se escriba en un archivo que podría romperse; normalmente, esto se envía a un registro de algún tipo, o se descarga directamente, incluso cuando se redirige el stdout. Para redirigir ambos al mismo lugar, use:
command &> /some/file
EDITAR : gracias a Zack por señalar que la solución anterior no es portátil, use en su lugar:
*command* > file 2>&1
Si quiere silenciar el error, haga lo siguiente:
*command* 2> /dev/null
Para obtener el resultado en la consola Y en un archivo file.txt
por ejemplo.
make 2>&1 | tee file.txt
Nota: &
(en 2>&1
) especifica que 1
no es un nombre de archivo sino un descriptor de archivo.
Use esto – "require command here" > log_file_name 2>&1
Descripción detallada del operador de redirección en Unix / Linux.
El operador> redirige la salida generalmente a un archivo pero puede ser a un dispositivo. También puede usar >> para agregar.
Si no especifica un número, entonces se asume el flujo de salida estándar, pero también puede redirigir los errores
> file redirects stdout to file 1> file redirects stdout to file 2> file redirects stderr to file &> file redirects stdout and stderr to file
/ dev / null es el dispositivo nulo que toma cualquier entrada que desee y la descarta. Se puede usar para suprimir cualquier salida.
Créditos a osexp2003 y ja …
En lugar de poner
&>> your_file.log
detrás de una línea en
crontab -e
yo suelo
#!/bin/bash exec &>> your_file.log …
al comienzo de un script BASH.
Ventaja: tiene las definiciones de registro dentro de su secuencia de comandos. Bueno para Git, etc.
Puede ser el error estándar. Puedes redirigirlo:
... > out.txt 2>&1
Mando:
foo >> output.txt 2>&1
se agrega al archivo output.txt , sin reemplazar el contenido.
Puede usar el comando exec
para redirigir todo el resultado stdout / stderr de cualquier comando posterior.
secuencia de comandos de ejemplo:
exec 2> your_file2 > your_file1 your other commands.....
Use >>
para agregar:
command >> file
En Linux Mint, esta secuencia de comandos encaminó la ejecución de secuencias de comandos y errores a un solo archivo de texto. bash -x ./setup.sh > setup.txt 2>&1
. El nombre del script fue setup.sh y el destino de salida fue setup.txt.