> /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
読んでいるので、最後にあります。stderr
stdout