Imprimir
Categoría: Bash
Visto: 4655

En PC Resumen vamos a hablar en este artículo de la necesidad de redirigir resultados de la ejecución de un comando a diferentes lugares (Otros Scripts, programas, ficheros de texto, etc.).

Los descriptores de archivos

En Bash o cualquier otro lenguaje de comandos por shell en Linux, existen tres tipos de descriptores:

Cualquier script en Bash, hereda estos tres tipos de descriptores, haciendo así posible, la interacción con ellos por parte del programador o usuario.

¿Cómo enviar un STDOUT y STDERR a un archivo de texto?

A veces necesitamos enviar la salida "STDOUT" a un archivo y no a la pantalla del terminal, porque es muy grande para ver el resultado o porque nos interesa guardarlo al disco duro como un "log". Para enviar la salida "STDOUT" a un archivo usamos el comando ">" con lo que se sobreescribe el archivo si ya existe, o bien ">>" que solo añade el resultado de salida al final del archivo ya existente. Veamos un ejemplo de como se podría usar:

#!/bin/bash
# En este Script vamos a usar la entrada por teclado "STDIN" para ejecutar un comando y enviar por la salida estandar "STDOUT" a un fichero de texto el resultado.

echo "Indique un comando a realizar:"
read # Probemos de ejecutar el comando ls -lsh para guardar el resultado.
$REPLY >> resultado.txt

Si queremos que un proceso use su entrada estándar a partir de un archivo existente usamos "<". Veamos el siguiente ejemplo:

#!/bin/bash
# En este Script vamos a usar la entrada "STDIN" a partir de un fichero de texto con el comando ls -lsh y enviarlo por la salida estandar "STDOUT" a un fichero de texto el resultado.

read < lectura.txt # Lee el comando que hay dentro del fichero
$REPLY >> resultado.txt

Si queremos enviar la salida de errores "STDERR" a un archivo de texto. se hace igual que en la salida "STDOUT" pero usando los comandos "&>" o "&>>" según necesitemos. Veamos un ejemplo práctico:

#!/bin/bash
# En este Script vamos a usar la salida de errores "STDERR" haciendo fallar un comando que entraremos por teclado y lo guardaremos en un fichero de texto.

echo "Indique un comando a realizar:"
read # Probemos de ejecutar un comando que no existe. 
$REPLY &>> error.txt

Para enviar la salida de errores "STDERR" a la salida estándar "STDOUT" escribimos el comando "2>&1" y a la inversa que queremos enviar la salida estándar "STDOUT" a la de errores "STDERR" usamos el comando "1>&2".

Tuberías

Las tuberías se utilizan para enviar la salida de un comando o proceso como entrada de otro, esto a veces es necesario para completar una acción iniciada con un comando que debe ser completada con otro comando. Para usar las tuberías, solo se coloca el carácter "|" en la línea de comandos entre un programa y el otro. Este carácter se conoce como "pipe" en inglés. Veamos un ejemplo en el que se usa las "Tuberías":

#!/bin/bash
# En este Script vamos a hacer una tubería donde con el comando "top" y "grep" que nos permite buscar dentro de un archivo, las líneas que coinciden con un patron.
# Allí buscaremos el proceso de nuestro terminal "konsole" y guarde los datos en un fichero de resultado.

top | grep -e "konsole" >> resultado.txt

Con esto termina el artículo de "Redirecciones en Bash". En el próximo artículo hablaremos de los "Generalizadores en Bash". Esperamos que os haya ayudado nuestro artículo a entender el concepto de las redirecciones, si tenéis alguna duda podéis poneros en contacto con nosotros a través del formulario de la Web, o bien escribiendo un correo electrónico a Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo..