stderr (Error estándar)
100%

Text-Fu · Lección 3

stderr (Error estándar)

Aprende a redirigir el error estándar por separado o a combinarlo con la salida estándar en Bash.

Los programas suelen escribir sus resultados normales en la salida estándar y los diagnósticos en un flujo independiente llamado error estándar o stderr. Mantener separados ambos flujos permite guardar datos útiles sin mezclarlos con mensajes de error.

Separación de la salida normal y los errores

$ ls /fake/directory > peanuts.txt
ls: cannot access '/fake/directory': No such file or directory

El operador > solo redirige stdout. El diagnóstico se escribe en stderr, que sigue conectado a la terminal. Mientras tanto, la shell crea o trunca peanuts.txt para stdout aunque ls no produzca ningún resultado normal.

Los flujos estándar utilizan por convención estos descriptores de archivo:

  • 0: stdin (entrada estándar)
  • 1: stdout (salida estándar)
  • 2: stderr (error estándar)

¿Por qué el error de ls /missing > results.txt permanece normalmente en la terminal?

Redirección de stderr con 2>

Para redirigir stderr a un archivo, usas el descriptor de archivo 2 seguido del operador >. Este comando enviará cualquier mensaje de error al archivo stderr especificado.

$ ls /fake/directory 2> errors.txt

La shell crea o trunca errors.txt y lo conecta al descriptor 2. Stdout conserva su destino anterior. Utiliza 2>> errors.txt cuando quieras añadir la salida de error.

¿Qué orden sustituye errors.log con los diagnósticos de find /restricted y deja stdout en su destino actual?

Combinación de stdout y stderr

¿Qué pasa si quieres capturar tanto la salida normal como los mensajes de error en el mismo archivo? Puedes lograr esto redirigiendo ambas secuencias.

$ ls /fake/directory /etc/passwd > combined.txt 2>&1

Analicemos esto:

  1. > combined.txt redirige stdout (descriptor de archivo 1) al archivo combined.txt.
  2. 2>&1 redirige stderr (descriptor de archivo 2) a la misma ubicación a la que apunta actualmente stdout (descriptor de archivo 1).

El orden es importante. 2>&1 envía stderr al destino actual de stdout. En este caso, stdout apunta a un archivo, por lo que stderr también se envía a ese archivo.

Invertir el orden cambia el resultado:

$ ls /fake/directory /etc/passwd 2>&1 > regular.txt

Aquí stderr duplica primero el destino original de stdout, la terminal. Después stdout se mueve a regular.txt, por lo que ambos flujos terminan en lugares diferentes.

¿Qué redirección de Bash envía stdout y stderr de command a all.log?

Una forma más moderna y corta de redirigir tanto stdout como stderr es usando &>.

$ ls /fake/directory /etc/passwd &> combined.txt

Utiliza &>> para añadir ambos flujos en Bash. Conviene reconocer la forma explícita > archivo 2>&1 porque también aparece en scripts y documentación.

¿Qué orden de Bash añade stdout y stderr de build a build.log?

Descartar deliberadamente un flujo

A veces, es posible que desees ejecutar un comando e ignorar por completo cualquier mensaje de error potencial. Para hacer esto, puedes redirigir stderr a un archivo especial llamado /dev/null, que descarta cualquier dato escrito en él.

$ ls /fake/directory 2> /dev/null

Esto no hace que la orden tenga éxito ni cambia su estado de salida; solo oculta el flujo de diagnósticos. Durante la resolución de problemas, conserva o muestra stderr en vez de descartar la información que necesitas.

¿Qué cambia check-data 2> /dev/null?

Para practicar la gestión de los tres flujos estándar, prueba este laboratorio:

  1. Redirección de Entrada y Salida en Linux - En este laboratorio, aprenderás a redirigir la entrada y la salida en el shell de Linux. Practicarás el control del flujo de datos desde los comandos manipulando la salida estándar (stdout), el error estándar (stderr) y la entrada estándar (stdin) usando operadores como >, >>, 2>, y el comando tee.

Lección completada

Has completado stderr (Error estándar)

Ahora puedes mantener separados los diagnósticos o combinarlos con la salida normal de una orden.

  • Reconocer stderr como descriptor de archivo 2.

  • Sustituir o ampliar un registro de errores con 2> o 2>>.

  • Aplicar varias redirecciones de izquierda a derecha.

  • Combinar los dos flujos de salida con una sintaxis deliberada.

  • Descartar diagnósticos solo cuando resulte aceptable perderlos.

Guarda tu progreso

Crea una cuenta gratuita para guardar esta lección y continuar en cualquier dispositivo.

Crear una cuenta gratuita
Siguiente Lección
Volver a Text-Fu