Project

General

Profile

Actions

Bug #3836

closed

Kernel.system, spawnがスペースを含むパスで動作しない

Added by nazy (Hiroki Najima) over 14 years ago. Updated over 13 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.2p0 (2010-08-18) [i386-mingw32]
Backport:

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

Actions #1

Updated by nobu (Nobuyoshi Nakada) over 14 years ago

  • Status changed from Open to Rejected

=begin
1.9.1までのWindows版固有のバグです。

=end

Actions #2

Updated by nobu (Nobuyoshi Nakada) over 14 years ago

=begin
以下のようにすれば、バージョン・プラットフォームに関係なく動くはずです。

system(["spa ce.bat"]*2)

=end

Actions #3

Updated by nazy (Hiroki Najima) over 14 years ago

=begin

1.9.1までのWindows版固有のバグです。
たしかに、いままで動いていた方がおかしいですね。
system(commandline)の解釈を間違っていました。

the standard shellにそのまま渡すので、the standard shellの解釈により、
実質は"spa"というプログラム(実行パス)に、"ce.bat"という引数を渡すことになると理解しました。

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0