Cómo redireccionar texto

Cuando utilizamos un comando como echo o ping, lo más común es que los resultados aparezcan en la pantalla de la terminal. Pero lo interesante es que si queremos, podemos enviar el texto resultante directamente a otro programa o archivo.

Esto es posible gracias a que Linux y los sistemas operativos tipo Unix utilizan los que se conoce como entrada estándar (stdin), salida estándar (stdout) y error estándar (stderr). Estos son “flujos de texto” que la mayoría de los comandos utilizan. Veamos un ejemplo.

Supongamos que queremos saber en que archivos de nuestro directorio home aparece nuestro nombre. Para eso introducimos este comando:
Screenshot from 2016-02-18 21-39-30

Screenshot from 2016-02-18 20-46-04

Después del nombre del comando (grep), tenemos un guion y dos letras. Esto se conoce como argumentos del programa, y son opciones que nos permiten cambiar el comportamiento del programa.
En este caso, estoy usando -r, que le ordena a grep a buscar no solo en la carpeta especificada (./, la carpeta actual), sino también en todas las subcarpetas, subsubcarpetas y así.
También estoy usando -n, que le ordena a grep a imprimir también el numero de linea del archivo en donde encontró la palabra buscada (mauricio).

Pero si grep encuentra muchas lineas, lo que hará nuestra terminal es mostrar la ultima linea encontrada, y si queremos ver la primera tenemos que subir manualmente en la terminal. Hacer esto no es muy práctico. Por suerte, tenemos el comando less, que acepta texto y lo muestra en la terminal de forma que lo podamos ver desde el principio.

Screenshot from 2016-02-18 21-08-51

 

Screenshot from 2016-02-18 21-01-38
Para unir la salida estándar de grep (el texto encontrado) con la entrada estándar de less, utilizamos el símbolo | (pleca o barra vertical, conocido en ingles como pipe). Para salir de less, presionamos la tecla q.

Utilizamos este símbolo cuando queremos pasar texto de un programa a otro, pero, y si queremos enviar texto a un archivo? Como vimos brevemente en el post anterior, vamos a redireccionar la salida estándar.

Screenshot from 2016-02-18 21-09-21

Y verificamos que el texto se haya guardado en el archivo.

Screenshot from 2016-02-18 21-10-37

Para pasar texto de un archivo a un programa usamos el símbolo <, aunque esto no es muy utilizado, ya que la mayoria de los programas aceptan el nombre de un archivo como argumento, como se ve en el ejemplo anterior.

Los más atentos se estarán preguntando, y el error estándar?
El error estándar es un flujo de texto separado de la salida estándar, por eso, lo debemos invocar explícitamente. Stdin, stdout y stderr estan asociados con los numeros 0, 1 y 2, respectivamente. Entonces, por ejemplo, para redireccionar un error de ls, hacemos esto:

Screenshot from 2016-02-18 21-13-19

A veces queremos que tanto stdout y stderr no aparezcan en a terminal, sino que directamente vayan a un archivo. Para eso hacemos un_comando > archivo_destino 2>&1.

Algo que se suele hacer cuando se desea que no aparezcan los errores es enviarlos a al dispositivo especial /dev/null. Este dispositivo acepta texto y lo descarta automáticamente.

Alguna duda o pregunta? No dudes en dejar un comentario.

Deja un comentario