From: Kazuhiro NISHIYAMA Date: 2008-03-18T18:58:13+09:00 Subject: [ruby-list:44789] Re: $stdin.rewind が exec した子プロセスに伝わらない? 西山和広です。 At Tue, 18 Mar 2008 18:19:21 +0900, SATOH Fumiyasu wrote: > > シェルを介したくないんですが、IO.popen でできましたっけ? "-"でpopenしてexecでできそうです。 > コマンドインジェクションの可能性とか、シェルのメタ文字を > エスケープとか、セキュリティの不安や不確実性を > 対応したり考えるのが嫌なので。なので、Kernel#system も: > > system([cmd, cmd], args) > > としています。 普通は複数引数のsystemの方が簡単に安全になるので、 私も普通は複数引数を使っています。 argv[0]をわざわざ指定したいことはあまりないので、 そこは違いますが。 > 我ながらうまく書けた (自画自賛 :-) と思っているんですが、 > ダメ出しあるなら頂けると嬉しいです。> all ダメ出しというより好みの問題に近いですが、Process.forkは ブロック付きの方が子プロセスはここだけ、という感じがするし、 exit!を忘れてもブロックから抜けることがないので便利です。 exit!(1)は失敗という意味だけでいいのならexit!(false)という のもあります。 unless stdout_reader_th.join(@timeout)というのは スレッドをnilかfalseを返す可能性がある実装に変えて しまうとはまりそう、と思ってしまいました。 -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA)