REDIRECCIONES Y PIPES


En UNIX la forma de realizar redirecciones es fuertemente dependiente de la shell utilizada; sin embargo, para estos primeros pasos se pueden destacar las características comunes a todas ellas que son, a la vez, las más utilizadas. En principio, se podría señalar que cada proceso UNIX tiene asociadas 3 vías de entrada/salida (E/S) estándares:

Estos puntos E/S pueden ser redirigidos de una manera en apariencia similar al DOS: así escribiendo

> nombre_fichero

tras el nombre de un comando, que producirá la redirección de su salida a un fichero. De manera análoga se actuará con la entrada escribiendo

< nombre_fichero

También es posible realizar redirecciones de la salida de error, que se estudiarán en el tema dedicado a shells.

El listado 1 ha sido generado mediante la instrucción:

ls -lF /etc > lsetc.txt

Este ejemplo ilustra también la opción -F del comando ls, que hará  que aparezca:

El comando ls en linux, además mostrará de distinto color cada tipo de fichero, según se indique en el /etc/DIR_COLORS.

En el capítulo anterior se veía como el comando cat podía mostrar el contenido de un fichero:

cat fichero

Del mismo modo, se podría haber redirigido la salida para copiar el fichero:

cat fichero1 > fichero2

Otro ejemplo de utilización sería no indicar el parámetro de entrada, con lo que el comando leería de la STDIN (teclado). Esto es algo que se puede realizar con un tipo especial de comandos UNIX llamados filtros que se estudiará más adelante. Así, por ejemplo:

cat > notas

copiaría todo lo que se tecleara al fichero notas (para indicar al comando que se ha finalizado habría que teclear CTRL + D). Equivaldría a un copy con: notas en DOS.

Una forma muy potente de comunicación entre procesos es el llamado pipe. Como se señalaba en el capítulo de introducción, un usuario puede ejecutar varios procesos e interconectarlos a través de pipes o tuberías, simbolizados por el carácter ¦ (ASCII 124). A través de un pipe, se realiza una llamada al sistema que interconecta la STDOUT de un comando con la STDIN del siguiente. Ambos procesos se ejecutarán concurrentemente, es decir, en paralelo. No hay que confundir un pipe UNIX con el mecanismo del DOS que utiliza el mismo símbolo, donde no existe concurrencia de procesos sino paso de información a través de ficheros temporales.

Como ejemplo útil, se podría teclear

ls ¦ sort ¦ more

que produciría una salida en pantalla y paginada del contenido del directorio actual ordenado alfabéticamente.