Redirigir todos los resultados a un archivo en Bash [duplicado]
Sé que en Linux, para redirigir la salida de la pantalla a un archivo, puedo usar >
o tee
. Sin embargo, no estoy seguro de por qué parte del resultado todavía se muestra en la pantalla y no se escribe en el archivo.
¿Hay alguna manera de redirigir todos los resultados al archivo?
Esa parte está escrita en stderr, úsela 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, verifique que su shell tenga la sintaxis adecuada
Todos los sistemas operativos POSIX tienen 3 flujos : stdin, stdout y stderr. stdin es la entrada, que puede aceptar stdout o stderr. stdout es la salida principal, que se redirige con >
, >>
o |
. stderr es la salida del error, que se maneja por separado para que las excepciones no se pasen a un comando ni se escriban en un archivo que pueda dañarse; Normalmente, esto se envía a un registro de algún tipo o se descarga directamente, incluso cuando se redirige la salida estándar. 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 desea silenciar el error, haga:
$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.