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