Viernes de Terminal: Standard Stream

Bienvenidos a otro viernes mรกsโ€ฆ

Es tiempo de conocer una minรบscula parte de la terminal. Despuรฉs de mucho pensarlo me decidรญ a crear un post acerca de las standard streams; aunque serรก superficial, creo que es algo que todos deben conocer.

Standard Stream

Standard Stream estรก compuesto por varios canales de comunicaciรณn entre el usuario y la terminal. Estos ยซcanalesยป Input/Output (Entrada/Salida) muestran o capturan informaciรณn cuando un comando es ejecutado.

Diagrama rapido sobre los standard streams.

Diagrama rapido sobre los standard streams.

Las 3 conexiones I/O son: stdin Standard input, stdout Standar output, stderr Standard error.

stdin: Standard input

La entrada estรกndar es la forma en la que capturamos informaciรณn de un comando, ya sea por medio de pipes, redirecciรณn, teclado, etc. Lo identificamos con el descriptor de archivo 0.

El descriptor es un indicador para acceder -en este caso- a los canales de entrada y salida. Estos son valores int, por lo general 0, 1 y 2.

Un ejemplo de stdin seria:

sort < listado

Toma toda la informaciรณn que se encuentra en listado -en este caso los nรบmeros escritos de manera aleatoria-, y al redireccionar el archivo al comando ls, รฉste ordena alfabรฉticamente la lista numรฉrica. En este ejemplo los indicadores estรกn implรญcitos.

stdout: Standard output

La salida estรกndar, como su nombre lo indica, muestra la salida de un comando por medio de la consola. Si escribimos ls toda la informaciรณn que nos muestra en pantalla es la salida estรกndar. Es representada por el descriptor 1.

Ahora intentarรฉ ejemplificar stdin y stdout con un script escrito en bash, simplemente porque me encanta bash hahaha. ๏™‚

test.sh

#!/bin/bash

if [ -t 0 ]; then
    echo "Estas usando stdout"
elif [ -t 1 ]; then
    echo "Estas usando stdin"
else 
    echo "Error brutal"
fi

Ahora una captura de pantalla que demuestra cรณmo utilizar el script. Al redireccionar o usar un pipe con el script usa test -t para saber si sรณlo se ejecuta el script stdout, y si no obviamente es stdin.

bash test.sh
ls | bash test.sh
bash test.sh < /etc/passwd
El script en cuestiรณn y sus salidas...

El script en cuestiรณn y sus salidasโ€ฆ

Recuerden modificar el comando y practicar asรญ aprenden.

stderr: Standard error

El Error estรกndar es la manera en la que los programas muestran errores o diagnรณsticos. Es representado por el descriptor 2.

Para entender el concepto, รฉsta es la situaciรณn: cuando queremos guardar un error de un comando lo primero en que pensamos es redireccionar la salida a un texto plano.

ls > info.txt

Esto funcionarรญa, la informaciรณn del comando se almacenarรก en un archivo de texto plano. Pero al momento de guardar el error, no lo almacena, si no que lo muestra en pantalla y el archivo de texto plano estรก vaciรณ.

En cambio si usamos 2> para indicar que guarde stderr en el archivo:

ls foo 2> info.txt

Ahora sรญ guardara la informaciรณn del error en el archivo de texto.

La mayorรญa de las Shell permiten almacenar stderr y stdout en un solo comando comando con &> donde Foo es un directorio inexistente

ls Descargas Foo &> info.txt

Este fichero contendrรก la informaciรณn del error al ejecutar ls en Foo y listarรก los directorios dentro de Descargas.

Y para finalizar ยฟQue significa ese famoso 2>&1?

Simple, redirige stderr a stdout. Ese & en medio de > y 1 significa que redireccionarรก a stdout. Si no estuviera ahรญ seria algo comoโ€ฆ ยซredirecciona el error hacia el archivo 1ยป.

Y con esto es posible redireccionar:

  • stdout a un archivo
  • stderr a un archivo
  • stdout a stderr
  • stderr a stdout
  • stderr y stdout a un archivo
  • entre otros

Eso es todo por hoy gente. Nos leemos y gracias por pasar. ๏˜€


Deja tu comentario

Tu direcciรณn de correo electrรณnico no serรก publicada. Los campos obligatorios estรกn marcados con *

*

*

  1. Responsable de los datos: Miguel รngel Gatรณn
  2. Finalidad de los datos: Controlar el SPAM, gestiรณn de comentarios.
  3. Legitimaciรณn: Tu consentimiento
  4. Comunicaciรณn de los datos: No se comunicarรกn los datos a terceros salvo por obligaciรณn legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu informaciรณn.

      eliotime3000 dijo

    Interesante. Gracias a tus tutoriales es que me estรก gustando Bash mucho mรกs.

      Quincy Magoo dijo

    Estimado, interesante, sin embargo tienes un error en la siguiente linea:

    ยซy al redireccionar el archivo al comando lsยป, deberia ser ยซy al redireccionar el archivo al comando sortยป.

    Un saludo.

      Miguel dijo

    Hay un error al comienzo del texto, cuando indicas el comando ยซlsยป, deberรญa ser ยซsortยป:
    ยซToma toda la informaciรณn que se encuentra en listado -en este caso los nรบmeros escritos de manera aleatoria-, y al redireccionar el archivo al comando ls (aquรญ serรญa sort)ยป

    Un saludo y gracias por compartir tu trabajo

      roader dijo

    Esto es genial para los cron , en las que quieres que la salida sea desechada (/dev/null) pero los errores sean guardados en ficheros . Ademas , cuando hago esto , suelo usar el comando date para especificar en que momento exacto fallaron .

    Bash (sh) tiene estas herramientas tan desarrolladas por aquello de la filosofia Unix ยซhaz una cosa , y hazla bienยป

      Lolo dijo

    Pues yo no me he enterao de nรก

         Vozidea dijo

      Jaja pues estรก explicado bastante bien, ยฟquรฉ no has entendido?