GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo redirigir stderr a stdout en Bash

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.

Redireccionamiento de salida #

La redirección es una forma de capturar la salida de un programa y enviarla como entrada a otro programa o archivo.

Las transmisiones se pueden redirigir usando el n> operador, donde n es el número del descriptor del archivo.

Cuando n se omite, por defecto 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 ) use el 2> operador:

command 2> file

Puede escribir tanto stderr y stdout a 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 a stdout #

Al guardar la salida del programa en un archivo, es bastante común redirigir stderr a stdout para que puedas tener todo en un solo archivo.

Para redirigir stderr a stdout y tiene mensajes de error enviados al mismo archivo como salida estándar, use lo siguiente:

command > file 2>&1

> file redirigir el stdout a file y 2>&1 redirigir el 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 del stdout fue redirigido a file .

command 2>&1 > file 

Otra forma de redirigir stderr a stdout es usar el &> construir. 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 , utilice el 2>&1 o &> construcciones.

Si tiene alguna pregunta o comentario, no dude en dejar un comentario.


Linux
  1. ¿Cómo redirigir la salida de un programa a un archivo zip?

  2. Cómo redirigir la salida a un archivo y stdout

  3. ¿Cómo analizar un archivo CSV en Bash?

  4. ¿Cómo verificar syslog en Bash en Linux?

  5. Redirigir toda la salida al archivo en Bash

Cómo verificar si existe un archivo o directorio en Bash

Cómo leer archivos línea por línea en Bash

Cómo verificar si existe un archivo o directorio en Bash

Cómo leer un archivo línea por línea en Bash

Cómo usar operadores de prueba de archivos Bash en Linux

Cómo redirigir la salida del servicio systemd a un archivo