command > /dev/null 2>&1 の意味

疑問

シェルスクリプトで下記のような記述に出会ったのでなんのことか調べてみた。

command > /dev/null 2>&1
# command は任意のコマンドのこと

調べた結果

Linuxコマンドので任意のcommandを実行し、その際の標準出力と標準エラー出力を捨てることを意味しています。

各部分の意味は以下のとおりです。

  • commandcommand を実行
  • >:標準出力(stdout)をリダイレクトします。ここでは、/dev/null にリダイレクトしています。
  • /dev/null:リダイレクト先。ここに送られたデータはすべて破棄されます。つまり、標準出力を捨てることになります。
  • 2>標準エラー出力(stderr)をリダイレクトします。
  • &1:標準出力へのリダイレクト先を指定します。この場合、標準出力(すでに /dev/null にリダイレクトされている)と同じ場所にリダイレクトされます。つまり、標準エラー出力も捨てられます。

このコマンド全体で、commandを実行し、
その際に発生する標準出力と標準エラー出力を両方とも捨てることができます。これにより、コマンド実行時にコンソールに何も表示されなくなります。

command > /dev/null 2>&1 コマンドは、command 実行時にエラーが発生しても、エラーメッセージが表示されないようになります。

このコマンドの構成要素は、標準出力と標準エラー出力/dev/null にリダイレクトしているため、コマンド実行時にコンソールに何も表示されません。これは、スクリプト実行中に不要なエラーメッセージを表示しないようにするために役立ちます。

参考

いい加減覚えよう。 `command > /dev/null 2>&1`の意味 - Qiita