Bug #3836
closedKernel.system, spawnがスペースを含むパスで動作しない
Description
=begin
名島(nazy)と申します。
1.9.2からKernel.systemまたはKernel.spawnにスペースを含むコマンドを渡すと動作しなくなりました。
1.9.1および、1.8.7では動作します。
# 1.8.7にはspawnは無いのでsystemのみ
NEWSには記載されていませんでしたが、これは意図的な仕様変更でしょうか?
なお、コマンドをクオートすると動作します。
スペースを含むプログラム¶
C:>type "spa ce.bat"
@echo This is %0.
Ruby 1.9.2でクオートしない場合、エラー¶
C:>C:\ruby192\bin\ruby -v
ruby 1.9.2p0 (2010-08-18) [i386-mingw32]
C:>C:\ruby192\bin\ruby -e 'p system("spa ce.bat")'
nil
C:>C:\ruby192\bin\ruby -e 'p spawn("spa ce.bat")'
-e:1:in spawn': No such file or directory - spa ce.bat (Errno::ENOENT) from -e:1:in
'
Ruby 1.9.1でクオートしない場合、正常動作¶
C:>C:\ruby191\bin\ruby -v
ruby 1.9.1p429 (2010-07-02 revision 28523) [i386-mingw32]
C:>C:\ruby191\bin\ruby -e 'p system("spa ce.bat")'
This is "spa ce.bat".
true
C:>C:\ruby191\bin\ruby -e 'p spawn("spa ce.bat")'
28204
This is "spa ce.bat".
クオートすればどのバージョンでも動く¶
C:>C:\ruby192\bin\ruby -e 'p system(""spa ce.bat"")'
This is "spa ce.bat".
true
C:>C:\ruby192\bin\ruby -e 'p spawn(""spa ce.bat"")'
24700
This is "spa ce.bat".
C:>C:\ruby191\bin\ruby -e 'p system(""spa ce.bat"")'
This is "spa ce.bat".
true
C:>C:\ruby191\bin\ruby -e 'p spawn(""spa ce.bat"")'
28168
This is "spa ce.bat".
=end
Updated by nobu (Nobuyoshi Nakada) about 14 years ago
- Status changed from Open to Rejected
=begin
1.9.1までのWindows版固有のバグです。
=end
Updated by nobu (Nobuyoshi Nakada) about 14 years ago
=begin
以下のようにすれば、バージョン・プラットフォームに関係なく動くはずです。
system(["spa ce.bat"]*2)
=end
Updated by nazy (Hiroki Najima) about 14 years ago
=begin
1.9.1までのWindows版固有のバグです。
たしかに、いままで動いていた方がおかしいですね。
system(commandline)の解釈を間違っていました。
the standard shellにそのまま渡すので、the standard shellの解釈により、
実質は"spa"というプログラム(実行パス)に、"ce.bat"という引数を渡すことになると理解しました。
=end