>> /dev/null 2>&1
ステートメントを部分に分解しましょう:
パート1: >>
出力リダイレクト
これは、プログラム出力をリダイレクトし、ファイルの最後に出力を追加するために使用されます。もっと...
パート2: /dev/null
特殊ファイル
これは、疑似デバイス特殊ファイルです。
このコマンドのls -l /dev/null
詳細は次のとおりです。
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
観察しましたcrw
か?これは、シリアルアクセスを提供する文字特殊ファイルタイプの疑似デバイスファイルであることを意味します。
/dev/null
すべての入力を受け入れて破棄します。出力を生成しません(読み取り時に常にファイルの終わりの指示を返します)。リファレンス:ウィキペディア
パート3: 2>&1
ファイル記述子
あなたがプログラムを実行するたびに、我々は、ファイルが開かれるたびに、(からオペレーティングシステム知っているように、オペレーティングシステムは常に三つのファイル、標準入力、標準出力、および標準エラーを開き、カーネルが)と呼ばれる非負の整数を返すファイルディスクリプタを。これらのファイルのファイル記述子は、それぞれ0、1、2です。
つまり、2>&1
単に標準エラーを標準出力にリダイレクトするということです。
&
以下はファイル名ではなくファイル記述子であることを意味します。
つまり、このコマンドを使用すると、実行中に叫ばないようにプログラムに指示できます。
を使用することの重要性は何2>&1
ですか?
端末でエラーが発生した場合でも、出力を生成したくない場合。より明確に説明するために、次の例を考えてみましょう:
$ ls -l > /dev/null
上記のコマンドの場合、出力はターミナルに出力されませんでしたが、このコマンドでエラーが発生した場合はどうなるでしょうか。
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
出力を/dev/null
にリダイレクトしていますが、ターミナルに出力されます。これは、エラー出力を/dev/null
にリダイレクトしないためです。そのため、エラー出力もリダイレクトするために、以下を追加する必要があり2>&1
ます。
$ ls -l file_doesnot_exists > /dev/null 2>&1
>&- 2>&-
です。