lundi 18 février 2013

REDIRECCIONES Y TUBERÍAS

9. REDIRECCIONES Y TUBERÍAS...................................................................................................................56
9.1 REDIRECCIONES .......................................................................................................................................56
9.2 TUBERÍAS.................................................................................................................................................56
9.3 BIFURCACIÓN O T (COMANDO TEE) ...........................................................................................................57
9.4 REDIRECCIÓN DE LA SALIDA DE ERRORES..................................................................................................

9. REDIRECCIONES Y TUBERÍAS
9.1 Redirecciones
Los comandos de Linux tienen una entrada estándar (número 0) y dos salidas estándar (número 1
para la salida normal del comando, y número 2 para la salida de los mensajes de error que se puedan
producir en su ejecución). Por defecto tanto la entrada como las salidas estándar de los comandos
son la propia terminal, a no ser que por la propia naturaleza del comando se den en él los nombres
de algunos ficheros que hagan el papel de entrada y de salida. Por ejemplo, en el comando
cp file1 file2
file1 es la entrada y file2 es la salida; aquí no intervienen las entradas y salidas estándar. Sin
embargo, cuando utilizamos por ejemplo el comando ls (listado de directorio), la salida de este
comando se dirige hacia la terminal. Si queremos que la salida de este comando se dirija a un
fichero llamado file, podríamos escribir,
ls >file
el (>) es uno de los llamados operadores de redirección y dirige la salida estándar hacia el fichero
indicado a continuación; si este fichero no existe, se crea en ese momento. Otros operadores de
redirección son el operador (<) que redirige la entrada estándar desde un determinado fichero, y el
operador (>>) que redirige la salida estándar hacia otro fichero, pero añadiendo dicha salida al final
de ese fichero, sin sobreescribir el contenido original. Por ejemplo, si cada vez que entramos en el
sistema ejecutamos el comando,
date >>archivo
tendremos un fichero llamado archivo que contiene información sobre todas las veces que hemos
entrado en el sistema. Otro ejemplo, para añadir al fichero file2 al final de file1 y al conjunto
llamarle file3, sería
cat file1 file2 >file3
o, si quisiéramos que el fichero resultante fuera el mismo file1,
cat file2 >>file1
Un ejemplo en redirección a la entrada podría ser el siguiente,
mail juan <carta
que envía al usuario juan el contenido del fichero carta.
9.2 Tuberías
Siguiendo con los ejemplos anteriores, si quisiéramos enviar a juan una lista de nuestros ficheros
podríamos utilizar los comandos,
ls >fichero
mail juan <fichero
rm fichero
Capítulo 9: REDIRECCIONES Y TUBERÍAS página 57
Es decir que hemos conectado la salida estándar de ls con la entrada estándar de mail, a través de un
fichero transitorio filelist. Linux permite hacer esta operación directamente, sin pasar por el fichero
de almacenamiento transitorio: esto se hace mediante el concepto de tubería (pipe), que consiste en
empalmar la salida estándar de un comando con la entrada estándar de otro. Para el ejemplo anterior
esto se hace en la forma,
ls | mail juan
Con el operador de tubería (|) se pueden empalmar tantos comandos como se desee.
9.3 Bifurcación o T (comando tee)
A veces interesa que la salida de un comando, además de redirigirse a un determinado fichero, se
bifurque también hacia la terminal, con objeto de observar inmediatamente el resultado. Esto se
consigue con el operador tee, que podría emplearse de la siguiente forma:
ls | tee file
la salida de ls se bifurca hacia la terminal y hacia file.
Si quisiéramos que la salida de este comando se añadiera al final de file, deberíamos utilizar la
opción -a,
ls | tee -a file
9.4 Redirección de la salida de errores
Los mensajes de error se dirigen a la salida número 2, que normalmente es también la terminal. A
veces, por ejemplo cuando se quiere ejecutar un comando en background (ejecutar un comando en
background es lanzar su ejecución y recuperar el control de la terminal sin esperar a que termine, lo
cual se hace añadiendo el carácter & al final del comando), interesa evitar que los mensajes de error
aparezcan en la pantalla, pues en ella habremos empezado a hacer otra cosa.
Supongamos por ejemplo que queremos compilar y montar en background un conjunto de ficheros,
dirigiendo los listados a un fichero llamado listados, y los mensajes de error a un fichero llamado
errores. Lo haríamos en la forma,
gcc prueba.c 2>errores
con lo cual la salida 2 (errores) se redirige hacia el fichero errores. Para redirigir la salida estándar
de errores al mismo fichero que la salida estándar se emplea un comando como:
program <datos.d >resultados.r 2>&1

Aucun commentaire:

Enregistrer un commentaire