Redirecciones

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:

Redirección de la salida estándar

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.

Redirección de la entrada estándar

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.

Redirección de la salida estándar de errores

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.

Importante

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.

El operador &n

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).