¿Qué tal esto:
./script 3>&1 1>/dev/null 2>&3 | ./other-script
La idea es "hacer una copia de seguridad" del descriptor de salida estándar, cerrar la salida estándar original y luego redirigir strerr a la salida estándar guardada.
Es muy similar a la solución provista por geirha, pero es más explícita (la codificación bash puede oscurecerse fácilmente).
quieres
./script 2>&1 1>/dev/null | ./other-script
El orden aquí es importante. Supongamos que stdin (fd 0), stdout (fd 1) y stderr (fd 2) están todos conectados inicialmente a un tty, entonces
0: /dev/tty, 1: /dev/tty, 2: /dev/tty
Lo primero que se instala es la tubería. El stdin de other-script se conecta a la canalización, y el stdout de la secuencia de comandos se conecta a la canalización, por lo que los descriptores de archivo de la secuencia de comandos hasta ahora se ven así:
0: /dev/tty, 1: pipe, 2: /dev/tty
A continuación, se producen las redirecciones, de izquierda a derecha. 2>&1
hace que fd 2 vaya dondequiera que vaya actualmente fd 1, que es la tubería.
0: /dev/tty, 1: pipe, 2: pipe
Por último, 1>/dev/null
redirige fd1 a /dev/null
0: /dev/tty, 1: /dev/null, 2: pipe
Resultado final, la salida estándar del script se silencia y su stderr se envía a través de la canalización, que termina en la entrada estándar de otro script.
Consulte también http://bash-hackers.org/wiki/doku.php/howto/redirection_tutorial
También tenga en cuenta que 1>/dev/null
es sinónimo de, pero más explícito que >/dev/null