Diary/2011-2-24
Bashのリダイレクトとかパイプとか
tiwtterでつぶやいたら,いろいろな人に教えていただきました.
- miyox: bashってstderrを|&でだせないのか...
- toyoshim: @miyox 2>&1 じゃなかったっけ? bash使いじゃないので怪しいけど
- tgbt:@miyox 2>&1 | でしたっけ?
- miyox: @tgbt おおー、なるほど。ありがとうございます♪
- miyox: 2>&1 でstderrをstdoutと同じディスクリプタに書くのか。でも、2>&1 > hogeとかやってもhogeにはstdoutだけが書き出されるのね。&>と同じ挙動になるのかと思ったのにー。
- shinji_kono: @miyox 順序が逆でないと、期待した通りにならないはずです。
- y-Aki: @miyox 順序が重要なはず
- miyox: @y_aki @shiji_kono 順序ですか。うーん、./a.out 2>&1 > fefe.2.1と./a.out 1>&2 > fefe.1.2でも元のstdoutだけがファイルに書かれます。勿論./a.out &> fefeだとstdoutもstderrも書かれますが。
- miyox: 順序ってこういうことか...わかったような。わからないような。 http://www.fireproject.jp/feature/bash/basic/redirect-pipe.html#3
- untamedcat: @miyox あやふやな情報なのでアレですが、bashの場合は右から順番に解釈されて有効になっていく、と何処かで教わった気が。
- miyox: @untamedcat ああー、そうなんですねー。なるほどです。
- y_aki: @miyox ./a.out > foo 2>&1 でfooにstdoutとstderrが入る >foo でハンドル1(stdout)のリダイレクトで、2>&1で ハンドル2(stderr)をハンドル1に繋げるってことです