From: nobu.nakada@... Date: 2002-12-18T15:21:14+09:00 Subject: [ruby-dev:19114] Re: lib/mkmf.rb; Shellwords.shellwords なかだです。 At Wed, 18 Dec 2002 13:22:35 +0900, WATANABE Hirofumi wrote: > VC++でRuby 1.7をmakeしていて気づいたんですが、 > lib/mkmf.rbのxsystemでShellwords.shellwordsしてからsystemに > 渡してます。これはなぜでしょう? > > メタ文字を気にしなくていいからという予想は立ちますが、 > ext/dbm/extconf.rbで > -DDBM_HDR="" > が > -DDBM_HDR= > になってしまい、mswin32では必ず失敗してしまいます。 > #字面通りndbm.hから読もうとしてしまう。 よく思い出せないんですが、DOSでは'はメタ文字にはならないから、 という理由だったような気がします。 At Wed, 18 Dec 2002 14:11:52 +0900, U.Nakamura wrote: > | > | これはひょっとして、mswin32のsystemをなんとかすべき問題? > | > > | > なんとか、とは、例えばどんなんでしょう? > | > シェルを経由しない、とか? > | > | そうです。Rubyの仕様としては、Perlと同様で、 > | system("command") > | という形式の場合メタ文字を含むときはシェルを経由しますが、 > | system("progmram", "arg1", "arg2", ...) > | という形式ならシェルを経由しないことになってますので。 > > えーと、process.c:rb_f_system()で問答無用でjoinしてdo_spawn() > してるのが問題なわけですね。 ext/dbm/extconf.rbとlib/mkmf.rbで対処するのは簡単ですが、同じこ とを期待するコードが動かないことに変わりはないので、対応したほ うが望ましいんじゃないでしょうか。 > | やはりPerlのようにdo_aspwanが必要なのかも。 > > プロセス生成のあたりには他にも幾つかあるので、ちょっと考えて > みます。 mswin32に限った話ではありませんが、非同期型の子プロセス生成のた めのポータブルな方法もあるべきだと思います。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦