Página siguiente Página anterior Índice general

3. Todo sobre redirección

3.1 Teoría y referencia rápida

Existen 3 descriptores de ficheros: stdin, stdout y stderr (std=estándar).

Básicamente, usted puede:

  1. redirigir stdout a un fichero
  2. redirigir stderr a un fichero
  3. redirigir stdout a stderr
  4. redirigir stderr a stdout
  5. redirigir stderr y stdout a un fichero
  6. redirigir stderr y stdout a stdout
  7. redirigir stderr y stdout a stderr
El número 1 'representa' a stdout, y 2 a stderr.

Una pequeña nota para ver todo esto: con el comando less puede visualizar stdout (que permanecerá en el búfer) y stderr, que se imprimirá en la pantalla, pero será borrado si intenta leer el búfer.

3.2 Ejemplo: stdout a un fichero

Esto hará que la salida de un programa se escriba en un fichero.

        ls -l > ls-l.txt
        
En este caso, se creará un fichero llamado 'ls-l.txt' que contendrá lo que se vería en la pantalla si escribiese el comando 'ls -l' y lo ejecutase.

3.3 Ejemplo: stderr a un fichero

Esto hará que la salida stderr de un programa se escriba en un fichero.

        grep da * 2> errores-de-grep.txt
        
En este caso, se creará un fichero llamado 'errores-de-grep.txt' que contendrá la parte stderr de la salida que daría el comando 'grep da *'.

3.4 Ejemplo: stdout a stderr

Esto hará que la salida stdout de un programa se escriba en el mismo descriptor de fichero que stderr.

        grep da * 1>&2 
        
En este caso, la parte stdout del comando se envía a stderr; puede observar eso de varias maneras.

3.5 Ejemplo: stderr a stdout

Esto hará que la salida stderr de un programa se escriba en el mismo descriptor de fichero que stdout.

        grep * 2>&1
        
En este caso, la parte stderr del comando se envía a stdout. Si hace una tubería con less, verá que las líneas que normalmente 'desaparecen' (al ser escritas en stderr), ahora permanecen (porque están en el stdout).

3.6 Ejemplo: stderr y stdout a un fichero

Esto colocará toda la salida de un programa en un fichero. A veces, esto es conveniente en las entradas del cron, si quiere que un comando se ejecute en absoluto silencio.

        rm -f $(find / -name core) &> /dev/null 
        
Esto (pensando en la entrada del cron) eliminará todo archivo llamado `core' en cualquier directorio. Tenga en cuenta que tiene que estar muy seguro de lo que hace un comando si le va a eliminar la salida.
Página siguiente Página anterior Índice general