Flujos estándar en Bash

Fumbani Banda 30 enero 2023
  1. Flujos estándar
  2. Entrada estándar
  3. Entrada estándar usando el teclado
  4. Entrada estándar usando archivos
  5. Entrada estándar de redirección
  6. Entrada estándar de tubería
  7. Salida estándar
  8. Salida estándar a pantalla
  9. Salida estándar redirigida a archivo
  10. Salida estándar a través de una tubería
  11. Error estándar
  12. Error estándar redirigido al archivo
  13. Redirigir toda la salida al archivo
Flujos estándar en Bash

Este tutorial explica los flujos estándar y la redirección de salida y entrada hacia y desde un archivo.

Flujos estándar

En Linux, hay tres flujos estándar; entrada estándar (stdin), salida estándar (stdout), y error estándar (stderr). Cada flujo está representado por un descriptor de archivo. La entrada estándar se representa con un 0, la salida estándar con un 1 y el error estándar con un 2.

Entrada estándar

La entrada estándar son los datos que se pasan a un programa. Por lo general, es escribiendo en el teclado. También pueden ser datos que se han canalizado o redirigido al programa. La entrada estándar utiliza EOF (fin de archivo) para indicar el final de los datos de entrada.

Entrada estándar usando el teclado

Usaremos el comando cat para demostrar la entrada estándar usando datos de entrada de la palabra clave. El comando cat toma la entrada y la imprime en la pantalla.

Abra la terminal de Linux y escriba cat, y presione enter. Ahora puede escribir cualquier entrada, y una vez que presiona enter, el comando cat muestra la entrada en la terminal. El comando cat se ejecuta en bucle; para que deje de recibir más entradas, presione CTRL+D. Actúa como una señal para indicar el EOF.

stdin-cat

Entrada estándar usando archivos

Los archivos también pueden proporcionar entrada a un programa. Usaremos el comando cat para demostrar que un archivo se puede usar como entrada estándar.

El comando cat toma el nombre del archivo como argumento y muestra el contenido del archivo en la terminal. En la imagen de abajo, el comando cat toma el archivo, output.txt, y muestra su contenido en la terminal.

stdin2-cat

Entrada estándar de redirección

La redirección de entrada estándar utiliza el operador de redirección de entrada estándar, <. La redirección de entrada utiliza la notación command < filename. Esto significa que la entrada para el comando proviene del contenido dentro del nombre de archivo especificado.

En la imagen a continuación, los contenidos de output.txt se pasan al comando cat que los imprime en la terminal.

stdin3-cat

Entrada estándar de tubería

Un operador de canalización se utiliza para pasar la salida de un comando como entrada a otro comando. El operador de tubería es una barra vertical, |.

A continuación, el comando head obtiene las primeras 10 líneas del archivo, output.txt, y las canaliza al comando cat como entrada estándar. El comando cat lo muestra como salida a la terminal.

stdin4-cat

Salida estándar

La salida estándar muestra datos generados por un programa. Estos datos se imprimen en el terminal si no se redireccionan o canalizan.

Salida estándar a pantalla

Se puede usar casi cualquier comando de Linux para demostrar la salida estándar. Usaremos el comando head para demostrar esto. El comando head toma un nombre de archivo como argumento e imprime solo las primeras 10 líneas del archivo.

cabeza de salida estándar

Salida estándar redirigida a archivo

La redirección de salida estándar utiliza el operador de redirección de salida estándar, >. La redirección de salida utiliza la notación command > nombre de archivo. Significa que la salida del comando debe escribirse en el nombre de archivo especificado.

La notación command >> nombre de archivo significa agregar la salida del comando al archivo en lugar de sobrescribir el archivo existente. El >> se denomina operador de redirección de adición.

Usamos el operador de redirección de salida para redirigir la salida del comando ls al archivo output.txt. El comando cat se usa para mostrar el contenido del archivo pasado como argumento.

redirección de salida estándar

Salida estándar a través de una tubería

Un operador de canalización se utiliza para pasar la salida de un comando a otro comando. El operador de tubería es una barra vertical, |.

Aquí, la salida del comando ls se canaliza al comando head. El comando head solo muestra (salida estándar) las primeras 5 líneas al terminal desde la entrada que le fue canalizada.

tubo de salida estándar

Error estándar

El error estándar es similar a la salida estándar excepto que se usa para mensajes de error de un programa.

Usaremos el comando ls para demostrar el error estándar. El comando ls se usa para mostrar el contenido dentro de una carpeta. Pasaremos un nombre de carpeta que no existe como argumento al comando ls, y mostrará un mensaje de error usando el error estándar.

carpeta stderror

Error estándar redirigido al archivo

Usamos el operador de redirección de salida estándar para redirigir el error estándar a un archivo. Sin embargo, tenemos que especificar que nos gustaría redirigir el error estándar agregando 2 al operador de redirección de salida, 2> como descriptor de archivo.

Redirijamos ahora el error estándar del comando ls a un archivo. El 2> especifica que solo los errores generados por el comando ls deben redirigirse al archivo errors_file.txt.

archivo stderr

Usemos el comando cat para mostrar el contenido de errors_file.txt. A continuación, vemos que el archivo contiene el mensaje de error del comando ls.

stderr-cat

Redirigir toda la salida al archivo

Para redirigir tanto la salida estándar como el error estándar al mismo archivo, use la siguiente notación,

command > archivo 2>&1. Redirige ambas secuencias del comando al archivo especificado.

En la imagen a continuación, tanto la salida estándar como el error estándar del comando ls se redireccionan al mismo archivo, output.txt.

salida-ambos

Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub