From: Hiroki NAJIMA Date: 2010-09-27T11:59:57+09:00 Subject: [ruby-dev:42303] Re: WindowsでのKernel.systemの挙動、一貫性について (2010/09/24 13:35), U.Nakamura wrote: > こんにちは、なかむら(う)です。 > > In message "[ruby-dev:42291] Re: WindowsでのKernel.systemの挙動、一貫性について" > on Sep.23,2010 13:04:16, wrote: >> 気になるのは、一貫してカレントディレクトリを無視するわけでは無いんですね。 >> 明示的にカレントディレクトリを指定しなくても、拡張子を指定すると、 >> カレントディレクトリのコマンドが実行されます。 >> 意図しない物が動いちゃいますし、一貫性はほしいです。 > > えーと、指定されたコマンドラインの内容によってはシェル経由の > 実行となってシェルさんがカレントディレクトリを探してくれてし > まう場合はあるかと思います。 十分にコードが理解できていないのですが、 シェルの実行前に「ファイルが見つかりませんでした」は難しいのでしょうか? シェルまでいっちゃうと、手が出ないので。 シェルコマンドでもなく、ファイルも見つからないのに、 CreateChildまで行っている理由がよく分かりません。 COMSPECがコマンドプロンプトでない時に、シェルコマンドでないことを特定できないからですか? > .batと.cmd以外の拡張子で実験するとまた結果は違うかもしれませ > ん。 .exeも同じ結果でした。 一応ファイルが見つかれなければエラーにするパッチを書いてみました。 テストに変化は有りません。(が、なぜかパッチを当てる前から結構失敗しているので、環境は怪しいかも) URL: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_9_2 $ svn diff win32/win32.c Index: win32/win32.c =================================================================== --- win32/win32.c (リビジョン 29347) +++ win32/win32.c (作業コピー) @@ -1137,7 +1137,7 @@ } shell = dln_find_exe_r(shell, NULL, fbuf, sizeof(fbuf)); if (!shell) { - shell = p ? p : cmd; + return -1; } else { len = strlen(shell); @@ -1199,6 +1199,10 @@ translate_char(cmd, '/', '\\'); prog = cmd; } + else { + return -1; + } + if (c_switch || is_batch(prog)) { char *progs[2]; progs[0] = (char *)prog; -- Hiroki NAJIMA (aka Nazy)