Ruby's ARGV can be empty on windows depending on a way to run script

六眼飞鱼酱① 提交于 2019-12-01 02:12:17

问题


My demo.rb:

puts ARGV.size

ARGV.each do |a|
  puts "Argument: #{a}"
end

The result depends on how we run a script:

> demo.rb foo bar
0

> ruby demo.rb foo bar
2
Argument: foo
Argument: bar

Why this happens? And can some thing be done with this?

EDIT: Thanks to all replies! Here my settings:

>assoc .rb
.rb=rbFile

>ftype rbFile
rbFile="c:\ruby-1.8.6\bin\ruby.exe" "%1" %*

So it looks right.

But I have discovered that

>demo.rb foo bar

starts process with such Command Line:

"C:\ruby-1.8.7\bin\ruby.exe" "c:\demo.rb"

Notice, that .rb associated with 1.8.6, but 1.8.7 is started.

So I guess some thing else is messed up?


回答1:


Open a command window:

assoc .rb

is it rbFile?

ftype rbFile

Make sure that Ruby.exe is followed by "%1" %*

the %* is sometimes missing.




回答2:


C:\Temp> ftype | grep ruby
rbFile="c:\opt\ruby\bin\ruby.exe" "%1" %*
rbwFile="c:\opt\ruby\bin\rubyw.exe" "%1" %*



回答3:


Check the file association. Especially in the advanced settings look at the "Open" action. Make sure that there is a %* on the end of the action.

This question is about powershell, but it is essentially the same question so my answer there should give a little more detail.




回答4:


Sounds like the arguments are not passed on to the ruby interpreter, in your association of the filetype. See this section for how the association should look, and verify yours.




回答5:


You can use a freeware tool from Nirsoft - FileTypesManager - to add the missing %* as mentioned in the other posts.



来源:https://stackoverflow.com/questions/1341233/rubys-argv-can-be-empty-on-windows-depending-on-a-way-to-run-script

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!