2010年9月18日土曜日

標準エラー出力のリダイレクト話

標準エラー出力と標準出力を混ぜたいときに使う
この文法
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

0 件のコメント: