標準エラー出力と標準出力を混ぜたいときに使う
この文法
command > hoge 2>&1
なぜ↓の様に書いては駄目なのか解説する
command 2>&1 > hoge ←これはうまく出ない
まず >&1 の意味は標準出力の出力先を指す
つまり標準出力と同じ場所に出したいときに指定する
間違った例だとなぜ標準エラー出力が標準出力に出てしまうか順番に解説
1.リダイレクトを指定しない場合
デフォルトの画面に出力される
標準出力先: 画面
標準エラー出力先: 画面
command
2.標準エラー出力先を標準出力と同じに指定
標準出力先は画面なのでエラー出力を同じに指定してもまた画面になる
標準出力先: 画面
標準エラー出力先: 画面(現在の標準出力先と同じ)
command 2>&1
3.標準出力先を指定
標準出力先をリダイレクトによって指定する
標準出力先: hoge
標準エラー出力先: 画面
command 2>&1 &> hoge
つまり 2>&1 という指定はその時点の標準エラー出力を参照するため、
まだ標準出力先を変更していない内に変更しても意味がないということ
参考リンク
http://www.fireproject.jp/feature/bash/basic/redirect-pipe.html