ARGV в Ruby может быть пустым в Windows, в зависимости от способа запуска скрипта - PullRequest
6 голосов
/ 27 августа 2009

Мой демо.рб:

puts ARGV.size

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

Результат зависит от того, как мы запускаем скрипт:

> demo.rb foo bar
0

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

Почему это происходит? И можно ли что-то сделать с этим?

EDIT: Спасибо за все ответы! Вот мои настройки:

>assoc .rb
.rb=rbFile

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

Так это выглядит правильно.

Но я обнаружил, что

>demo.rb foo bar

запускает процесс с такой командной строкой:

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

Обратите внимание, что .rb связан с 1.8.6, но 1.8.7 запущен.

Так, я думаю, что-то еще напутало?

Ответы [ 5 ]

8 голосов
/ 27 августа 2009

Открыть командное окно:

assoc .rb

это rbFile?

ftype rbFile

Убедитесь, что за Ruby.exe следует "% 1"% *

% * иногда отсутствует.

3 голосов
/ 27 августа 2009
C:\Temp> ftype | grep ruby
rbFile="c:\opt\ruby\bin\ruby.exe" "%1" %*
rbwFile="c:\opt\ruby\bin\rubyw.exe" "%1" %*
2 голосов
/ 27 августа 2009

Проверьте связь файлов. Особенно в расширенных настройках посмотрите на действие «Открыть». Убедитесь, что в конце действия есть% *.

Этот вопрос касается powershell, но по сути это тот же вопрос, поэтому мой ответ должен дать немного больше деталей.

1 голос
/ 27 августа 2009

Похоже, что аргументы не передаются интерпретатору ruby ​​в вашей ассоциации с типом файла. См. этот раздел о том, как должна выглядеть ассоциация, и проверьте свою.

0 голосов
/ 01 августа 2012

Вы можете использовать бесплатный инструмент от Nirsoft - FileTypesManager - чтобы добавить недостающие %*, как упоминалось в других сообщениях.

...