如何将参数传递给ruby命令行脚本

时间:2016-01-25 16:30:51

标签: ruby command-line command-line-arguments heredoc

我通过STDIN将脚本传递给ruby。如,

$ ruby << EE
> puts "args: #{ARGV}"
> EE
args: []
$ ruby << EE
> puts "args: #{ARGV}"
> EE 'arg1' 'arg2'
> EE
-:2: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
EE 'arg1' 'arg2'
    ^
$ ruby 'arg1' 'arg2' << EE
> puts "args: #{ARGV}"
> EE
ruby: No such file or directory -- arg1 (LoadError)
$ ruby -- 'arg1' 'arg2' << EE
> puts "args: #{ARGV}"
> EE
ruby: No such file or directory -- arg1 (LoadError)
$ ruby -e << EE
> puts "args: #{ARGV}"
> EE
ruby: no code specified for -e (RuntimeError)
$

我不知道在这种情况下如何传递参数。 -e选项无法获取传递给STDIN的内容。根据{{​​3}},语法为:

ruby ... [--] [prog_file] [args]

但我的prog_file位于STDIN

2 个答案:

答案 0 :(得分:3)

你可以传递像这样的参数

ruby << EE "" arg1 arg2
> puts ARGV.inspect
> EE
# ["arg1", "arg2"]

""用于ruby文件路径,或者在这种情况下为空。

答案 1 :(得分:2)

与许多其他Unix实用程序一样,ruby-识别为STDIN的特殊文件名:

$ echo "p ARGV" | ruby - foo bar
["foo", "bar"]

或:

$ ruby - foo bar << EE
> p ARGV
> EE
["foo", "bar"]

或:(按 control D 结束输入)

$ ruby - foo bar
p ARGV
["foo", "bar"]