cmdの出力を捨てたいときに使うんだと認識しているのですが、あんま意味がわかってないので順序追って考えてみた。
前提として
・/dev/nullへリダイレクトすることで出力を破棄している
・1は標準出力, 2は標準エラー出力の予約語的なもの
処理を追ってみる
コマンドを仮に 「ls > /dev/null 2>&1」とする。
1. lsの標準出力を/dev/nullにリダイレクトして破棄
2. 標準エラー出力2の出力を標準出力1に合わせる
実際考えてみると単純。
順番の話
でも前述した内容なら、順番適当でええんちゃうんと思って
ls 2>&1 > /dev/null
でいいかと思ったんだけど普通にエラー出力でた。
どういうことかと思って調べてるとこんな記事が
http://sonic64.com/2004-03-28.html
リダイレクト処理は、左から右へファイルをオープン/クローズしながら処理が進むよう。
つまり上記のコマンドだと
・1の出力先 [screen] 2の出力先 [screen]
--- 2の出力先を1の出力先に変更 ---
・1の出力先 [screen] 2の出力先 [screen]
--- 1の出力先を/dev/nullの出力先に変更 ---
・1の出力先 [/dev/null] 2の出力先 [screen]
となるから、標準エラー出力はスクリーンにでてしまう。