この質問にはすでに回答があります :/ dev/nullへのリダイレクト
(6つの回答)
6年前に閉鎖されました。
Linux
(6つの回答)
6年前に閉鎖されました。
プログラムがstdoutおよびstderrを端末、ファイル、またはデバイスに送信しないようにしたいと思います。このため、私は3つのコマンドを頭に入れていますが、それらの違いを区別することはできません。それぞれの意味を教えてください。
# ./run > /dev/null
# ./run > /dev/null 1>&2
# ./run > /dev/null 2>&1
承認された回答:
# ./run > /dev/null
これにより、stdoutが/dev/null
にリダイレクトされます 、しかし、stderrでは何もしません。 stdoutとstderrからリダイレクトするように要求したので、これはあなたが望むことをしません。
# ./run > /dev/null 1>&2
これにより、stdoutが/dev/null
にリダイレクトされます 、次にstdoutを再度リダイレクトします(1>
)stderrが(&2
を指す場所に )これはおそらくターミナルであり、リダイレクトする前にstdoutがポイントした場所である可能性があります。したがって、ここでの正味の効果は、(おそらく)stdoutのリダイレクトがまったくないことであり、stderrに関しては、それでも何もしません。したがって、これもあなたが望むものではありません。
# ./run > /dev/null 2>&1
これにより、stdoutが/dev/null
にリダイレクトされます 、次にstderrをリダイレクトします(2>
)stdoutが指す場所、つまり/dev/null
へ リダイレクトした場所だからです。これはあなたが望むもののようです。
違いがわかりません。
実際には、違いを非常に簡単に区別できるはずです。 ./run
としましょう これが含まれています:
#!/bin/sh
echo stdout
echo stderr >&2
その場合、結果は次のようになります。
# ./run > /dev/null
stderr
# ./run > /dev/null 1>&2
stdout
stderr
# ./run > /dev/null 2>&1
違いは明らかです!