system 関数の出力をファイルにリダイレクト

今日はここでほとんどの時間を使ってしまった…。system() の中で標準出力をファイルにリダイレクトしたいのだが、リスト形式だとうまくいかない問題が発生。これにはちゃんとした理由があって、system 関数の出力をファイルにリダイレクト(perl)*1によると、system にリスト形式の引数を渡すと shellを呼び出さないからだそうだ。(>> を使ったファイルのリダイレクトは shellの機能)

散々調べた挙句たどり着いたのが、第5回 Ruby 1.9 の新機能ひとめぐり(後編): 知っておくとお得な機能*2というサイトで、この方法を使ってやってみた。

f:id:nobunaga0519:20110324022125p:image

open(ファイル名) do |f|
system("program,[引数],...," out: f)
end

でok。

いざやってみるとこの程度で大量の時間を使ったと思うと泣きたくなった。
もっとしっかりしないとね!

*1:http://www.randynetwork.com/blog/172

*2:http://gihyo.jp/dev/serial/01/ruby/0005