¿Qué es Stderr?

Stderr, también conocido como error estándar, es el descriptor de archivo predeterminado donde un proceso puede escribir mensajes de error.

En sistemas operativos similares a Unix, como Linux, macOS X y BSD, stderr está definido por el estándar POSIX. Su número de descriptor de archivo predeterminado es 2 .

En el terminal, el error estándar se establece por defecto en la pantalla del usuario.

Stderr en la línea de comandos de Linux

En bash, el error estándar se puede redirigir en la línea de comando. La redirección de stderr puede ser útil si necesita capturar cualquier mensaje de error en un archivo de registro independiente u ocultar los mensajes de error por completo.

Por ejemplo, considere el siguiente comando de búsqueda :

 encontrar / -iname '* algo *' 
 / usr / share / doc / something / usr / share / doc / something / examples / something_random find: `/ run / udisks2 ': Permiso denegado encuentre:` / run / wpa_supplicant': Permiso denegado / usr / share / something / usr / juegos / algo 

Estamos recibiendo errores porque buscar está intentando buscar en algunos directorios del sistema que no tenemos permiso para leer. Las líneas que dicen "Permiso denegado" son mensajes de error y se escribieron en stderr . Las otras líneas fueron escritas a stdout (salida estándar). Por defecto, ambos se muestran en el terminal.

Para ocultar stderr, podemos redirigirlos haciendo referencia al número de descriptor de archivo del error estándar, 2, y a un operador de "salida de redirección", > .

 encuentra / -iname '* algo *' 2> / dev / null 
 / usr / share / doc / something / usr / share / doc / something / examples / something_random / usr / share / something / usr / games / something 

Los errores ya no se muestran, porque toda la salida a stderr se redirigió a / dev / null, el dispositivo especial en Linux que "no va a ninguna parte".

También podríamos redirigir todos los errores a un archivo:

 encuentra / -iname '* algo *' 2> output.txt 
 / usr / share / doc / something / usr / share / doc / something / examples / something_random / usr / share / something / usr / games / something 

Ahora, si controla el contenido de output.txt, verá que los mensajes de error se guardaron allí:

 cat output.txt 
 find: `/ run / udisks2 ': permiso denegado find:` / run / wpa_supplicant': permiso denegado 

Para obtener información detallada sobre cómo redirigir las secuencias de datos, consulte la redirección en bash.

Mensaje de error, términos del sistema operativo