1.5.2.- Redirigir la entrada y la salida

Usaremos símbolos seguidos de un comando para redirigir la entrada o salida. Por ejemplo, para redirigir la salida del comando echo escribiríamos algo similar a:

$ echo $NNTPSERVER > NNTPSERVER.txt

El resultado es que el fichero NNTPSERVER.txt contiene la salida del comando (en este caso, el valor de la variable de entorno $NNTPSERVER). Existen operadores de redirección para conseguir determinados efectos.

operador >

Operador de redirección Efecto
> Crea un nuevo fichero que contiene la salida estándar. Si el fichero especificado existe, se sobrescribe.
>> Añade la salida estándar al fichero existente. Si el fichero especificado no existe se crea.
2> Crea un nuevo fichero que contiene el error estándar. Si el fichero especificado existe se sobrescribe.
2>> Añade el error estándar al fichero existente. Si el fichero especificado no existe se crea.
&> Crea un nuevo fichero que contiene tanto la salida estándar como el error estándar. Si el fichero especificado existe se sobrescribe.
< Envía el contenido del fichero especificado para utilizarlo como entrada estándar.
<< Acepta el texto de las siguientes lineas como entrada estándar.
<> Hace que el fichero especificado se utilice para la entrada estándar y la salida estándar.

La mayoría de los operadores tienen que ver con la salida, porque hay dos tipos de salida (salida estándar y error estándar) y porque hay que tener presente qué pasa en caso de que se especifique un fichero que ya existe. El redirector más importante es <, que toma el contenido del fichero especificado como entrada estándar.

Truco.- Un truco habitual es redirigir la salida estándar o el error estándar hacia /dev/null. Este fichero es un dispositivo que no está conectado a nada; se utiliza para deshacerse de datos. Por ejemplo, si el programa whine genera demasiados mensajes de error, puede escribir whine 2> /dev/null para ejecutarlo y descartar sus mensajes de error.

Un operador de redirección que requiere elaboración es <<. Este operador implementa un here document (he aquí el documento), que toma el texto de las siguientes líneas como entrada estándar. Es probable que no emplee este redirector en la línea de comandos, pues las líneas siguientes son salidas estándar, por lo que no necesita redirigirlas. En vez de ello, es preferible utilizar este comando como parte de un script con el fin de pasarle datos a un comando. A diferencia de la mayoría de los operadores de redirección, el texto que va justo después del código << no es un nombre de fichero, sino una palabra que se emplea para indicar el final de la entrada. Por ejemplo, si escribimos someprog << EOF haremos que someprog acepte la entrada hasta que vea una línea que contiene sólo la cadena EOF (incluso sin un espacio a continuación).

NOTA.- Algunos programas que reciben la entrada de la línea de comandos esperan que ésta finalice pulsando CTRL-D. Esta combinación de teclas corresponde al marcador de fin de fichero que utiliza el ASCII (American Standar Code for Information Interchange, Código americano estándar para el intercambio de información).

El comando tee es la herramienta de redirección definitiva. Este comando divide la entrada estándar para que se muestre en la salida estándar y en tantos ficheros como especifique. Por lo general, tee se utiliza junto a los pipes de datos para que se pueda almacenar y visualizar de inmediato la salida de los programas. Por ejemplo, para ver y almacenar la salida de someprog, podría escribir algo como lo siguiente:

$ someprog | tee output.txt

NOTA.- La barra vertical (|) es el carácter de canalización, implementa un pipe, como se describe en la siguiente sección.

Normalmente tee sobrescribe aquellos ficheros cuyos nombre especifique. Si desea añadir datos a estos ficheros, pásale la opción -a a tee.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.