Aunque por defecto los ficheros estándar estan redirigidos a unos dispositivos en particular es posible cambiar esa redirección hacía otro dispositivo.
Para las redirecciones se utilizan los siguientes operadores:
< se utiliza para para indicar el fichero del que se recogeran los datos en lugar de la entrada estándar.
> se utiliza para redirigir hacía un fichero. El contenido del fichero es reemplazado.
>> se utiliza para añadir a un fichero. Se mantiene el contenido del fichero.
&n donde n es un descriptor. Se utiliza para redirigir un flujo hacía donde ha sido redirigido un fichero.
Muchas veces es necesario recoger la salida de un comando en un fichero para su posterior proceso.
Habrá que tener en cuenta si la información que vamos a recoger se va a almacenar en un fichero con datos o en uno vacío. En caso de almacenarse en uno con datos tendremos que tener claro si vamos o no a necesitar los datos ya existentes. En función de esto utilizaremos el operador > o >>:
[pcm@sal]$
ls -lh > contents.dir
La cual eliminaría el contenido del fichero contents.dir
reemplazandolo con el listado del directorio. O bien:
[pcm@sal]$
ls -lh >> contents.dir
Que añadiría el listado de directorios al contenido del fichero contents.dir
.
Es posible sustituir la entrada de datos a través del teclado mediante el operador <.
Esto es útil cuando queremos lanzar scripts de forma automatizada sin la intervención del usuario y es necesario el suplir información como login o contraseña.
Aunque por defecto tanto la salida estándar como la de errores estan ambas redirigidas hacía el monitor en realidad apuntan a dos ficheros diferentes.
Gracias a esto es posible separar ambas salidas para procesar por separado los errores y la salida del programa.
Para referirnos a la salida estándar de errores lo haremos mediante el operador 2>:
[pcm@sal]$
ls -lh >> contents.dir 2> errores
Se añadiráa el listado de directorios al fichero contents.dir
y los mensajes de errores que pudieran ocurrir en lugar de mostarse por la pantalla se almacenarán en el fichero errores
.
En realidad lo que estamos haciendo es utilizando el descriptor de la salida estándar e indicandole el tipo de redirección que queremos hacer.
Hay veces que es necesario redirigir tanto la salida como la salida estándar a un mismo fichero. Por ejemplo durante una compilación ya que es necesario conocer el orden de los mensajes, tanto de la compilación como de los errores.
Cuando queramos hacer una redirección hacía un fichero sobre el que ya se ha hecho una redirección utilizaremos el operador &n donde n es el descriptor del fichero que ha sido redirigido previamente a ese fichero:
[pcm@sal]$
make all > resultados 2>&1
En el ejemplo anterior estamos haciendo lo siguiente:
Redirigimos hacía el fichero resultados
la salida estándar del comando make all.
Mediante 2> indicamos que queremos redirigir la salida de errores.
Con &1 indicamos que la redirección de la salida de errores se hará al fichero al que se haya redirigido la salida estándar (descriptor 1).