Tuberías (pipes)

Quizás la utilidad más potente de la entrada/salida estándar es la posibilidad de encadenar comandos a través del uso de «tuberías» (pipes), que permiten que la salida de un comando sirva como entrada a otro.

Por ejemplo, si queremos ver el contenido del directorio /usr/bin podemos utilizar el comando ls como sigue:

ls /usr/bin

El problema es que este directorio contiene demasiados ficheros y éstos desaparecen de la pantalla muy rápidamente al visualizarlos. Para solucionarlo, sería útil tener alguna forma de visualizar textos que dividiera la visualización en páginas a través de las cuales pudiéramos navegar con mayor comodidad.

El comando more realiza una función como la que hemos descrito. Así, si deseamos visualizar página a página el contenido de un fichero llamado HOWTOUSE con información sobre el uso del programa cdda2wav situado en el directorio /usr/share/doc/cdda2wav, podemos hacer lo siguiente:

more /usr/share/doc/zip-3.0/README

El comando visualiza el contenido del fichero pero deteniéndose cuando el texto ocupa toda la página e indicando con un texto en la parte inferior el porcentaje del total que se ha mostrado hasta el momento. Pulsando la barra espaciadora podemos ir viendo el resto de páginas y pulsando la tecla ‘q’ finalizar la visualización.

Aunque el comando more parece adecuado para el problema que planteamos antes, la cuestión es ¿cómo lo aplicamos al resultado de visualizar el contenido de un directorio con ls si necesita que le proporcionemos un fichero como argumento? La solución consiste en encadenar la salida del comando ls y usarla como entrada para el comando more a través de una «tubería». Para ello utilizaremos el símbolo ‘|’ de la siguiente forma:

ls /usr/bin | more

Como resultado, obtenemos la salida que proporciona ls pero dividida en páginas.

Con el comando less puedes hacer lo mismo que con more, pero con la ventaja de que puedes avanzar y retroceder en el archivo. Prueba a repetir los ejemplos aquí usados, cambiando more por less.