systemadmin.es > Script > Eliminar la salida de un comando por stderr y stdout

Eliminar la salida de un comando por stderr y stdout

Para redirigir la salida por stderr a stdout y luego esto eliminarla mandandola a /dev/null se pueden usar los operadores de redirección (>). Vamos a ver como usarlos y su orden correcto:

La entrada y las salidas estándar son las siguientes:

  • stdin: Descriptor 0
  • stdout: Descriptor 1
  • stderr: Descriptor 2

Mediante la siguiente sintaxis:

2>&1

Estamos indicando que se redirija stderr a stdout. Para eliminar la salida a stdout podemos mandarla a /dev/null ya sea directamente:

>/dev/null

O bien indicando el descriptor:

1>/dev/null

Por lo que para mandar únicamente stderr a /dev/null haríamos:

2>/dev/null 

Para eliminar las dos salidas lo que debemos hacer es primero mandar a /dev/null stdout y luego mandar stderr a dónde vaya stdout, por lo tanto quedaría:

>/dev/null 2>&1

En el orden inverso stderr quedaría descolgado:

2>&1 >/dev/null

stderr se redirige al dónde apunte stdout, pero luego se cambia stdout a /dev/null, dejando stderr a dónde apuntase inicialmente stdout.

Podemos comprobarlo con el siguiente programa en C:

#include <stdio.h>

int main(void)
{
	fprintf(stdout,"hello world stdout\n");
	fprintf(stderr,"hello world stderr\n");
	return 0;
}

Si lo ejecutamos con el orden correcto no obtenemos salida:

./a.out >/dev/null 2>&1

Pero si lo ejecutamos al revés obtenemos lo que mandamos por stderr:

./a.out 2>&1 >/dev/null
hello world stderr

2 comments to “Eliminar la salida de un comando por stderr y stdout”

  1. Jordi, un pequeño tip para hacer mas elegantes los scripts.. con “&>” puedes controlar a la vez stdout y stderr:

    $ ./a.out &> /dev/null

    Saludos 🙂

  2. Esta es muy buena! Muchas gracias Santi por el comentario

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>