> /dev/null 2>&1はどのように機能しますか? [コピー]

> /dev/null 2>&1はどのように機能しますか? [コピー]

> /dev/null出力をリダイレクトすると、画面に印刷されない理由がわかります。

しかし、何らかの理由でこれだけでは十分ではなく、まだ何かが印刷されます。

この場合、> /dev/null 2>&1期待される結果が達成されます。

しかし、これは私を少し混乱させます。誰かがこれがどのように機能するかを詳しく説明できますか?

この部分は特に混乱しています&1。それを見ると&「バックグラウンドで実行される」という気がする。 1がどういう意味なのかはわかりませんが、2ならどうでしょうか?

ベストアンサー1

シェルで実行されるプログラムは3つのストリームを取得します。

0 - standard input [stdin]
1 - standard output [stdout]
2 - standard error (output) [stderr]

キーボードのように考えることができますstdin(単純化してパイプやリダイレクトはありません)。

その後、画面に何かを印刷するために、各プログラムは標準出力または標準エラーに書き込むことができます。通常、通常の出力はに行き、stdoutエラー出力はに移動しますstderr

リダイレクトすると、>標準出力のみがリダイレクトされます。あなたが使用できる1>

リダイレクトすると、2>stderrだけがリダイレクトされます。

したがって、プログラムが何かを印刷してstderr次のことを行う場合:

program > /dev/null

あなたはそれを見ることができます。

stderr出力を表示したくない場合は、リダイレクトとstdoutリダイレクトという2つ以上のソリューションがあります。stderr/dev/null

program > /dev/null 2>/dev/null

または、あなたの質問に対する答えは次のとおりです。stderrにリダイレクトされ、lstdoutにリダイレクトされました。/dev/nul

program > /dev/null 2>&1

これは Bash が右から左に2>&1読んでいるので、最後にあります。stderrstdout

おすすめ記事