これはどうですか:
./script 3>&1 1>/dev/null 2>&3 | ./other-script
アイデアは、stdout 記述子を「バックアップ」し、元の stdout を閉じてから、strerr を保存された stdout にリダイレクトすることです。
これは geirha が提供するソリューションに非常に似ていますが、より明示的です (bash コーディングは非常にわかりにくくなる可能性があります)。
欲しい
./script 2>&1 1>/dev/null | ./other-script
ここでの順序は重要です。 stdin (fd 0)、stdout (fd 1)、および stderr (fd 2) が最初はすべて tty に接続されていると仮定すると、
0: /dev/tty, 1: /dev/tty, 2: /dev/tty
最初にセットアップするのはパイプです。 other-script の stdin はパイプに接続され、script の stdout はパイプに接続されるため、これまでのスクリプトのファイル記述子は次のようになります:
0: /dev/tty, 1: pipe, 2: /dev/tty
次に、左から右へのリダイレクトが発生します。 2>&1
fd 2 は、fd 1 が現在移動している場所 (パイプ) に移動します。
0: /dev/tty, 1: pipe, 2: pipe
最後に 1>/dev/null
fd1 を /dev/null
にリダイレクトします
0: /dev/tty, 1: /dev/null, 2: pipe
最終結果、スクリプトの stdout は沈黙し、stderr はパイプを介して送信され、最終的に他のスクリプトの stdin になります。
http://bash-hackers.org/wiki/doku.php/howto/redirection_tutorialも参照してください
1>/dev/null
にも注意してください と同義ですが、>/dev/null
よりも明確です