Co třeba tohle:
./script 3>&1 1>/dev/null 2>&3 | ./other-script
Cílem je "zálohovat" deskriptor stdout, zavřít původní stdout a poté přesměrovat strerr na uložený stdout.
Je to hodně podobné řešení, které poskytuje geirha, ale je explicitnější (kódování bash se může snadno velmi zatemnit).
Chcete
./script 2>&1 1>/dev/null | ./other-script
Zde je důležité pořadí. Předpokládejme, že stdin (fd 0), stdout (fd 1) a stderr (fd 2) jsou zpočátku připojeny k tty, takže
0: /dev/tty, 1: /dev/tty, 2: /dev/tty
První věc, která se nastavuje, je potrubí. stdin jiného skriptu se připojí k rouře a stdout skriptu se připojí k rouře, takže deskriptory souborů skriptu zatím vypadají takto:
0: /dev/tty, 1: pipe, 2: /dev/tty
Dále dojde k přesměrování zleva doprava. 2>&1
způsobí, že fd 2 půjde všude tam, kam právě jde fd 1, což je potrubí.
0: /dev/tty, 1: pipe, 2: pipe
Nakonec 1>/dev/null
přesměruje fd1 na /dev/null
0: /dev/tty, 1: /dev/null, 2: pipe
Konečným výsledkem je, že stdout skriptu je umlčen a jeho stderr je odeslán potrubím, které skončí v stdin jiného skriptu.
Viz také http://bash-hackers.org/wiki/doku.php/howto/redirection_tutorial
Všimněte si také, že 1>/dev/null
je synonymem pro, ale explicitnější než >/dev/null