Che ne dici di questo:
./script 3>&1 1>/dev/null 2>&3 | ./other-script
L'idea è di "fare il backup" del descrittore stdout, chiudere lo stdout originale e quindi reindirizzare strerr allo stdout salvato.
È molto simile alla soluzione fornita da geirha, ma è più esplicita (il codice bash può facilmente diventare molto oscurato).
Vuoi
./script 2>&1 1>/dev/null | ./other-script
L'ordine qui è importante. Supponiamo che stdin (fd 0), stdout (fd 1) e stderr (fd 2) siano tutti connessi inizialmente a un tty, quindi
0: /dev/tty, 1: /dev/tty, 2: /dev/tty
La prima cosa che viene installata è la pipa. lo stdin di altri script viene connesso alla pipe e lo stdout dello script viene connesso alla pipe, quindi i descrittori di file dello script finora sono simili a:
0: /dev/tty, 1: pipe, 2: /dev/tty
Successivamente, si verificano i reindirizzamenti, da sinistra a destra. 2>&1
fa andare fd 2 dove sta andando fd 1, che è la pipe.
0: /dev/tty, 1: pipe, 2: pipe
Infine, 1>/dev/null
reindirizza fd1 a /dev/null
0: /dev/tty, 1: /dev/null, 2: pipe
Risultato finale, lo stdout dello script viene silenziato e il suo stderr viene inviato attraverso la pipe, che finisce nello stdin di other-script.
Vedi anche http://bash-hackers.org/wiki/doku.php/howto/redirection_tutorial
Nota anche che 1>/dev/null
è sinonimo di, ma più esplicito di >/dev/null