質問
/dev/null 2>&1とは何ですか? |
解答
一見呪文のようですが、要素に分解すると非常に論理的です。 1. まず登場人物
|
| 番号 | 名前 | 内容 |
|---|---|---|
0 | stdin | 標準入力 |
1 | stdout | 標準出力 |
2 | stderr | 標準エラー出力 |
2. 2>&1 の意味
分解すると
2 > &12>:標準エラー出力をリダイレクト&1:標準出力(ファイルディスクリプタ1)
👉 「stderrをstdoutと同じ場所へ」
3. /dev/null 2>&1 の全体像
典型例
command > /dev/null 2>&1処理の順序:
> /dev/null標準出力(1)を
/dev/nullに捨てる
2>&1標準エラー(2)を「今のstdout」と同じ場所へ
結果:
標準出力 →
/dev/null標準エラー →
/dev/null
👉 すべての出力を捨てる
4. 順番が重要な理由
次の2つは意味が違います。
正しい例(両方捨てる)
command > /dev/null 2>&1間違えやすい例
command 2>&1 > /dev/null処理順:
2>&1
→ stderrを**元のstdout(画面)**へ> /dev/null
→ stdoutだけ捨てる
結果:
stdout →
/dev/nullstderr → 画面に表示される
5. よく使われる用途
ログを一切出したくない
cron_command > /dev/null 2>&1エラーも含めてログファイルへ
command > all.log 2>&1エラーだけ捨てる
command 2> /dev/null6. なぜこんな書き方なのか(思想)
Unix哲学では:
出力はすべて「ファイル」
エラーも「別のストリーム」
だから、
必要なら混ぜる
捨てたいなら捨てる
別々にも扱える
という柔軟性が生まれています。
7. 一言でまとめると
/dev/null 2>&1は
「標準出力と標準エラー出力を同じ場所にまとめる呪文」
その場所が /dev/null なら、
完全に無言でコマンドを実行します。
|
|

この記事へのコメント