Blog
De seguro sabes que la terminal de Linux proporciona herramientas muy útiles para optimizar nuestras búsquedas y ejecución de tareas; pues en esta oportunidad te hablaremos sobre las redirecciones con linux y bash, una función ampliamente utilizada al momento de emplear tareas que requieren de interacción y para separar los errores de las salidas . Veamos de qué se trata,
Redirecciones de salida
Utilizando > y >>, podemos redirigir la salida estándar a otros archivos. La salida estándar es una herramienta que contiene lo que imprimen los comandos introducidos en la entrada estándar (standard input). Sin embargo, existe un tercer elemento, el standard error, que muestra los mensajes de error de los comandos introducidos en la entrada estándar. Por defecto, la salida y el error estándar se imprimen en la consola.
Cuando utilizamos un comando en el terminal, la respuesta se muestra en el flujo de salida estándar. Sin embargo, es posible redirigir estos flujos a otras ubicaciones, como redirigir el flujo de error a un archivo de texto, por ejemplo.
Ejecuta este comando, que genera un error:
cat no_file
Podemos utilizar 2> o 2>> para redirigir al “error estándar” en un archivo:
Ejecuta este comando para imprimir el error en errors_file
cat no_file 2> errors_file
El mensaje de error no se muestra en la consola, sino en el fichero errors_file.
Imprime el contenido de este archivo
head errors_file
Observa que la entrada estándar, la salida estándar y el error estándar están asociados cada uno a lo que llamamos un (file descriptor) descriptor de fichero, que corresponde respectivamente a los números enteros 0, 1, 2. Por eso encontramos 2> para la salida de error, mientras que > es el diminutivo de 1>, es decir, la salida estándar. También podemos redirigir texto a la entrada estándar utilizando < o 0<.
Ejecuta el siguiente comando:
head < root_content
Este comando es equivalente a head root_content. Es difícil ver el sentido de la entrada < estándar, pero su función principal es dar el contenido de un archivo como argumento.
Por ejemplo, crea el archivo nombre.py con el comando nano name.py con las siguientes líneas:
name = input("Enter your name") print("Hello {} !".format(name))
A continuación, escribe Daniel en un archivo de texto prenom a través de la salida estándar.
echo Daniel > firstname
Ejecuta el siguiente comando
python3 name.py < firstname
Sin la entrada estándar, el programa Python habría pedido que introdujeras el nombre de pila y, a continuación, habría mostrado ¡Hola tu-nombre!
También es posible utilizar varios flujos en un solo comando, por ejemplo con el comando de abajo, decidimos redirigir el error estándar en un archivo log y la salida estándar en un archivo fic:
cat 1>fic 2>log cat fic cat log
Por otro lado, si queremos que tanto la salida estándar como el error estándar se impriman en el mismo archivo, podemos utilizar la palabra clave 2>&1. Para ello, colócala al final de tu comando, como se muestra a continuación:
ls -l > fic 2>&1
Operador Pipe
En ocasiones durante las redirecciones con linux y bash, necesitaremos encadenar comandos y proporcionar la salida de un comando a otro comando. Para ello, podemos utilizar |.
Ejecuta el siguiente comando
ls / | grep bin
El comando ls / muestra el contenido de la raíz. La función grep es una forma muy útil de filtrar las líneas que contienen la siguiente expresión. Aquí, sólo devolveremos las líneas que contengan la expresión bin. Podemos encadenarlas:
Ejecuta este comando y mira lo que hace:
ls / | grep bin | head -n 1
Hay otro operador, &&, que simplemente conecta comandos, sin ningún vínculo entre ellos.
Ejecuta este comando
ls -l && python3 --version && mkdir Test
Ten en cuenta que si uno de los comandos falla, los siguientes no se ejecutarán.