Introducción
Al redirigir la salida de un comando a un archivo o redirigirlo a otro comando, puede notar que se imprimen mensajes de error en la pantalla.
En Bash y otros shells de Linux, cuando se ejecuta un programa, utiliza tres flujos de E /S estándar. Cada flujo está representado por un descriptor de archivo numérico:
0
-stdin
, el flujo de entrada estándar.1
-stdout
, el flujo de salida estándar.2
-stderr
, el flujo de errores estándar.
Un descriptor de archivo es solo un número que representa un archivo abierto.
El flujo de entrada proporciona información al programa, generalmente escribiendo el teclado.
La salida del programa va al flujo de entrada estándar y los mensajes de error van al flujo de error estándar. De forma predeterminada, tanto los flujos de entrada como los de error se imprimen en la pantalla.
Redirección de salida
La redirección es una forma de tomar la salida de un programa y enviarla como entrada a otro programa o archivo.
Las secuencias se pueden redirigir utilizando el n>
, donde n
es el número de descriptor de archivo.
Cuando n
, el flujo de salida estándar 1
Por ejemplo, los dos comandos siguientes son iguales; ambos redirigirán el stdout
) al archivo.
command > file
command 1> file
Para redirigir el error estándar ( stderr
) use el operador 2>
command 2> file
Puede escribir stderr
y stdout
en dos archivos separados:
command 2> error.txt 1> output.txt
Para suprimir la visualización de mensajes de error en la pantalla, redirija stderr
a /dev/null
:
command 2> /dev/null
Redirigir stderr a stdout
Al guardar la salida del programa en un archivo, es bastante común redirigir stderr
a stdout
para que pueda tener todo en un solo archivo.
Para redirigir stderr
a stdout
y enviar mensajes de error al mismo archivo que la salida estándar, utilice lo siguiente:
command > file 2>&1
> file
redirige stdout
a file
y 2>&1
redirige stderr
a la ubicación actual de stdout
.
El orden de redireccionamiento es importante. Por ejemplo, el siguiente ejemplo solo redirige stdout
a file
. Esto se debe a que stderr
se redirige a stdout
antes de redirigir stdout
al file
.
command 2>&1 > file
Otra forma de redirigir stderr
a stdout
es usar la construcción &>
En Bash &>
tiene el mismo significado que 2>&1
:
command &> file
Conclusión
Comprender el concepto de redireccionamientos y descriptores de archivos es muy importante cuando se trabaja en la línea de comandos.
Para redirigir stderr
y stdout
, use las 2>&1
o &>
.