From: NAJIMA Hiroki Date: 2010-09-22T00:13:28+09:00 Subject: [ruby-dev:42276] Re: WindowsでのKernel.systemの挙動、一貫性について 名島(Nazy)です。 お返事ありがとうございます。 (2010/09/21 10:17), U.Nakamura wrote: > こんにちは、なかむら(う)です。 > > In message "[ruby-dev:42270] WindowsでのKernel.systemの挙動、一貫性について" > on Sep.17,2010 03:20:57, wrote: >> 本件、まだ落とし穴がありそうなので、いろいろ実験してみました。 >> 数点気になるところがあります。 >> 個人的には、1引数の場合"/"を"\\"を解釈するだけで、 >> あとはsystem(3)と同じ動作でいいのでは?と思いますが、どれもそうなっていません。 > > 時間が取れないのであんまり細かく見られないんですけど、 > >> 2.ruby1.9.2のsystem関数はカレントディレクトリを実行パスに含まない。 >> Windowsなので、ruby1.9.2でもカレントディレクトリをサーチパスに含めるべきで無いでしょうか? >> 実験1参照 > > 少なくともこれはバグではなくて割と意図的です。 > わざわざWindowsの欠陥に合わせる意向は今のところありません。 意図は分かりました。 他の方法でWindowsに合わせることも容易なので、特に反論はないです。 おそらくNEWSの下記と同じ観点の変更なんでしょうね。 * $: no longer includes the current directory, use require_relative できれば、こういう互換性のなくなる変更はNEWSに記載があると助かります。 各メソッドの* incompatible changes:下記のように記載するとか、 * Kernel.exec no longer includes the implicit current directory definition of the PATH on Windows. * Kernel.exec no longer searches commands the current directory on Windows. のように書くか、最後にまとめて、 * The methods for command executions such as Kernel.system, Kernel.exec, Kernel.spawn, Kernel.`command`, Process.exec and Process.spawn no longer search commands in the current directory on Windows. # ひどい英語ですみません。 ちなみに、RubyのKernel.systemは、 実行パス中の"/"が解釈できて、Windowsでカレントディレクトリをサーチパスに含まない以外は、 基本的に各OSのsystem(3)と同じになるように振る舞うのが理想的という理解でよろしいでしょうか? また、なぜ1.が動かないのかは私でも調べてみます。 -- h.najima@gmail.com