next up previous contents index
Next: Expansión de nombres de Up: Control de la entrada Previous: Control de la entrada   Índice General   Índice de Materias


stdin, stdout, tuberías (pipelines) y redirección

Cada proceso tiene al menos tres conexiones con el mundo exterior. La entrada estándar es la fuente de los datos del proceso; la salida estándar es el lugar a donde el proceso envía datos; y la salida de error estándar es el lugar a donde el proceso envía mensajes de error (a menudo abreviados como stdin, stdout, y stderr).

Las palabras «fuente» y «lugar» son intencionalmente vagas. Estas entradas y salidas pueden modificarse por parte del usuario. Podrían ser la pantalla, el teclado, un fichero; incluso una conexión de red. Puede usted especificar lo que quiera utilizar.

Cuando ejecuta un programa desde el intérprete, normalmente la entrada estándar viene del teclado, y la salida estándar y de error van ambas a la pantalla. Sin embargo, puede especificar que se cambien estos valores por defecto.

Por ejemplo, la orden echo envía sus resultados a la salida estándar, normalmente la pantalla. Pero también puede enviarla a un fichero en su lugar, mediante el operador de redirección de salida, >. Por ejemplo, para poner la palabra «Hola» en el fichero mifichero, utilice esta orden:

     echo Hola > mifichero
Utilice cat o su paginador de texto (more o less) para ver el contenido de mifichero; vea la figura 12.3 en la página [*].

Figura: Redirección de salida
\begin{figure}\par\par\begin{alltt}
\relax{} $ \textbf{echo Hola > mifichero}
\\
\\ $ \textbf{cat mifichero}
\\
\\ Hola
\\
\\ $\relax \end{alltt}\end{figure}

Puede cambiar la entrada estándar de una orden con el operador de redirección de entrada, <. Por ejemplo, cat < mifichero mostrará el contenido de mifichero. Esto no es útil en la práctica, ya que, por conveniencia, la orden cat acepta un nombre de fichero como argumento. De manera que le basta con decir cat mifichero, y el efecto será el mismo.

Internamente, cat < mifichero quiere decir que el intérprete abre mifichero y vuelca su contenido a la entrada estándar de catcat mifichero, sin operador de redirección, significa que la orden cat recibe un argumento (mifichero), abre el fichero por sí misma, y muestra su contenido.

Sin embargo, hay una razón para esta doble funcionalidad. Por ejemplo, usted puede conectar la salida estándar de una orden a la entrada estándar de otra. A esto se le denomina tubería (pipe), y utiliza el operador de tubería (pipe operator)12.1, |.

Quizá desee leer la Licencia Pública General de GNU al revés. Para hacer esto, utilice la orden tac (es cat, sólo que al revés). Pruébelo:

     tac /usr/doc/copyright/GPL
Desafortunadamente, iba demasiado rápido para poder leerlo. Por lo tanto sólo verá un par de párrafos. La solución es hacer una tubería:

     tac /usr/doc/copyright/GPL | less
Toma la salida estándar de tac, que es la GPL al revés, y la envía a la entrada estándar de less.

De esta manera se pueden encadenar todas las órdenes que desee. Supongamos que le embargue un irracional deseo de sustituir cada G por una Q. Para esto se utiliza la orden tr G Q, de la siguiente manera:

     tac /usr/doc/copyright/GPL | tr G Q | less
Podría obtener el mismo efecto utilizando ficheros temporales y redirección, por ejemplo:

     tac /usr/doc/copyright/GPL > tmpfile

     tr G Q < tmpfile > tmpfile2

     less < tmpfile2

     rm tmpfile tmpfile2
Queda bastante claro que es más conveniente utilizar una tubería.


next up previous contents index
Next: Expansión de nombres de Up: Control de la entrada Previous: Control de la entrada   Índice General   Índice de Materias
Enrique Zanardi 2000-11-26