Wie wäre es damit:
./script 3>&1 1>/dev/null 2>&3 | ./other-script
Die Idee ist, den stdout-Deskriptor zu "sichern", die ursprüngliche stdout zu schließen und dann strerr auf die gespeicherte stdout umzuleiten.
Es ist der von geirha bereitgestellten Lösung sehr ähnlich, aber expliziter (die Bash-Codierung kann leicht sehr undurchsichtig werden).
Sie wollen
./script 2>&1 1>/dev/null | ./other-script
Die Reihenfolge ist hier wichtig. Nehmen wir an, stdin (fd 0), stdout (fd 1) und stderr (fd 2) sind anfänglich alle mit einem tty verbunden, also
0: /dev/tty, 1: /dev/tty, 2: /dev/tty
Das erste, was aufgebaut wird, ist das Rohr. stdin von other-script wird mit der Pipe verbunden und stdout von script wird mit der Pipe verbunden, also sehen die Dateideskriptoren von script bisher so aus:
0: /dev/tty, 1: pipe, 2: /dev/tty
Als nächstes erfolgen die Umleitungen von links nach rechts. 2>&1
lässt fd 2 dorthin gehen, wo fd 1 gerade hingeht, was die Pipe ist.
0: /dev/tty, 1: pipe, 2: pipe
Zum Schluss 1>/dev/null
leitet fd1 auf /dev/null
um
0: /dev/tty, 1: /dev/null, 2: pipe
Als Endergebnis wird die stdout des Skripts stummgeschaltet und ihre stderr wird durch die Pipe gesendet, die in der stdin von other-script endet.
Siehe auch http://bash-hackers.org/wiki/doku.php/howto/redirection_tutorial
Beachten Sie auch, dass 1>/dev/null
ist synonym zu, aber expliziter als >/dev/null