
多くの場合、if ステートメントで次のような構文を使用する小さな bash スクリプトに遭遇します。
some command > /dev/null 2>&1
/dev/null
このように出力する目的と2>&1
意味は何ですか?
常に動作しているように見えますが、何をしているのかを知りたいです。
答え1
>/dev/null
コマンドの標準出力をヌルデバイスにリダイレクトします。ヌルデバイスは、書き込まれた情報を破棄する特別なデバイスです。
2>&1
標準エラーストリームを標準出力ストリーム(stderr = 2、stdout = 1)にリダイレクトします。これは標準エラーストリームを取得し、その時点で標準出力と同じ場所を指すことに注意してください。これが順序の理由です。>/some/where 2>&1
最初にstdoutをどこかにポイントし、それから最終的に両方のストリームを結合したい場合は、stderr を同じ場所にポイントします。
実際には、コマンドからの出力 (stdout と stderr の両方) が表示されないようにします。コマンドの出力を気にしない場合に使用します。
答え2
STDIN は 0、STDOUT は 1、STDERR は 2 で表されます。
/dev/nullビットバケット: 必要のないものをすべて捨てる場所です。
したがって、STDOUT はビット バケット (ゴミ箱) にリダイレクトされ、STDERR は STDOUT が配置されている場所 (ビット バケット) にリダイレクトされます。
次のようなこともできます:
>/dev/null 2>/dev/null