Al redirigir la salida de un comando a un archivo o canalizarlo a otro comando, es posible que observe que los mensajes de error se imprimen 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 error 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 en 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 capturar la salida de un programa y enviarla como entrada a otro programa o archivo.
Los flujos se pueden redirigir usando el n>
operador, donde n
está el número del descriptor del archivo.
Cuando n
se omite, el valor predeterminado es 1
, el flujo de salida estándar. Por ejemplo, los siguientes dos comandos son iguales; ambos redirigirán la salida del comando ( stdout
) al archivo.
command > file
command 1> file
Para redirigir el error estándar ( stderr
) utilice el 2>
operador:
command 2> file
Puede escribir ambos stderr
y stdout
en dos archivos separados:
command 2> error.txt 1> output.txt
Para evitar que los mensajes de error se muestren en la pantalla, redirija stderr
a /dev/null
:
command 2> /dev/null
redireccionando stderr
astdout
Al guardar la salida del programa en un archivo, es bastante común redirigir stderr
para stdout
que pueda tener todo en un solo archivo.
Para redirigir stderr
y stdout
enviar mensajes de error al mismo archivo como salida estándar, use lo siguiente:
command > file 2>&1
> file
redirigir stdout
a file
y 2>&1
redirigir stderr
a la ubicación actual de stdout
.
El orden de redirección es importante. Por ejemplo, el siguiente ejemplo redirige solo stdout
a file
. Esto sucede porque stderr
se redirige a stdout
antes de que stdout
se redireccionara a file
.
command 2>&1 > file
stderr
Otra forma de redirigir stdout
es usar la &>
construcción. En Bash &>
tiene el mismo significado que 2>&1
:
command &> file
Conclusión
Comprender el concepto de redirecciones y descriptores de archivos es muy importante cuando se trabaja en la línea de comandos.
Para redirigir stderr
y stdout
, use las construcciones 2>&1
o &>
.
Si tiene alguna pregunta o comentario, no dude en dejar un comentario.
0 Comentarios