Redirigir las salidas STDOUT y STDERR

En Linux, los comandos que ejecutamos envían su salida a los flujos estándares (standard streams): STDOUT (1) y STDERR (2). Podemos redirigirlos hacia

  • un archivo
  • el otro flujo de datos: se indica con el número correspondiente precedido por &

Redirigir STDOUT

Comando [1]> <DESTINO>

lo que nos indica que podemos optar por indicar 1, dado que STDOUT es el flujo por defecto si no se especifica ninguno.

Ejemplo:

$ ls -la > listado.txt

Guardar la lista de elementos del directorio actual dentro de listado.txt

$ ./backup.pl 1> backup.log

Ejecutar el script backup.pl y el resultado de la ejecución guardarlo en el archivo de log.

Redirigir STDERR

Comando 2> <DESTINO>

Ejemplo:

$ grep Contenido * 2> errores.txt

Buscar el texto “Contenido” dentro de todos los archivos del directorio actual y los errores guardarlos en el archivo de texto.

$ grep Contenido * 2>&1 | sort

Buscar el texto “Contenido” dentro de todos los archivos del directorio actual y enviar los errores a la salida estándar, para que todo sea procesado por el comando sort.

Redirigir ambos a un mismo archivo

Comando [1]> <ARCHIVO>  2>&1

Ejemplo:

$ grep Contenido * > salida_completa.txt 2>&1

Buscar el texto “Contenido” dentro de todos los archivos del directorio actual y enviar los errores a la salida estándar, y la salida estándar al archivo salida_completa.txt (ambas salidas van al mismo archivo).

Descartar la salida de un comando

Para suprimir completamente la salida de un comando debemos redirigir ambas salidas a /dev/null (un dispositivo que descarta todo el contenido que en él se escriba):

$ ./reports.pl > /dev/null 2>&1

Con esto logramos que se ejecute el script reportes.pl pero que tanto su STDOUT como su STDERR se descarten (porque no interesan).

Basado en:

http://www.jstorimer.com/blogs/workingwithcode/7766119-when-to-use-stderr-instead-of-stdout

http://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/

Tagged with: , ,
Publicado en Linux
One comment on “Redirigir las salidas STDOUT y STDERR
  1. […] Para evitarlo, debemos redirigir la salida de STDOUT y STDERR […]

Los comentarios están cerrados.