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.
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.
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:
> combined.txtredirigestdout(descriptor de archivo 1) al archivocombined.txt.2>&1redirigestderr(descriptor de archivo 2) a la misma ubicación a la que apunta actualmentestdout(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:
- 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>o2>>.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