風邪で完全にダウン。やすめないのがきつい。
…… 38 度台かあ。体感のわりに低いな。 まあ、おれは 39 度こえると吐くからそんなもんかもしれない。
(19:37)
Windows でパイプをつなぎたくなったとする。
それでいて system とかは使わず自力でつなぎたいとする。
なんでパイプをつなぎたいのかってのは人それぞれだが、 「パイプをつながないと死んじゃう病」になったとか、 cmd.exe にプチきれてシェルを書き始めたとか、理由はいろいろ考えられる。
そんなわけで Win32API を調べたりしたんだけど、 つなげるだけなら Ruby では IO.popen を使えばいいので IO.popen(["こまんど", "引数"]) と書いとけばいいわけである。 あ、第一引数に配列が渡せるのは 1.9 限定だな確か。
ただ、IO.popen で一段はパイプがつなげるのだが、 ls | grep test | less みたいに二段以上になると どうしたらいいのかわからなくなってしまった。 まあ IO.popen("ls | grep test", "w") とか書くと ちゃんとパイプが働くのだけど、 やっぱこう、なんとなく自力でやりたいわけである。
で考えたのが、GetModuleFileName で自分の実行ファイルのパスを得て、 --connect-pipe とか適当な引数をつけて自分を起動して、 パイプ接続先コマンドを exec させるという方法。 それでなんとなく動いたんだけど、なんか実にアホな感じである。 もっと楽にいけないのかね。 というか cmd.exe はどうやってんだ。
そういえば、exec もどうやって実装されてるのか結構謎であった。 けど、実装を見てみたらすげー単純で驚いた。 子プロセスを作って WaitSingleObject で終了を待ってんのね。 こんな方法があるんだなあ。
(20:21)
あれ? なんで IO.popen("ls | grep build | false") ってちゃんと動くんだろ。
……あああそうかこれ Mac OS X じゃん……。 だめだ本当に風邪はよくない。 もう寝ゆ。
(20:45)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
IO.popen("-")じゃだめなんでしょうか?