GNU/Linux >> Linux の 問題 >  >> Linux

シェル:stdout を /dev/null にリダイレクトし、stderr を stdout にリダイレクトします

これはどうですか:

./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 よりも明確です


Linux
  1. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  2. 2>&-、2> / dev / null、|&、&> / dev/nullと>/dev / null 2>&1の違いは?

  3. コマンドがStdoutとStderrの両方を端末またはファイルに送信しないようにしますか?

  1. stderr を /dev/null にリダイレクト

  2. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

  3. カーネル:/dev/kmem と /dev/mem を無効化

  1. Linux が /dev/tty と /dev/tty0 を使用する方法

  2. echo または print /dev/stdin /dev/stdout /dev/stderr

  3. /dev/tcp を使用するために < または > が必要な理由