【问题标题】:How to pass parameters to ruby command line script如何将参数传递给ruby命令行脚本
【发布时间】:2016-01-26 01:21:54
【问题描述】:

我通过 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 的内容。根据man page,语法为:

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

但我的prog_fileSTDIN

【问题讨论】:

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


    【解决方案1】:

    你可以像这样传递参数

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

    "" 用于 ruby​​ 文件路径,或者在本例中为空。

    【讨论】:

      【解决方案2】:

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

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

      或:

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

      或者:(按controlD结束输入)

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

      【讨论】:

      • 谢谢。这是否记录在某处?
      • @Kashyap 我在 Ruby 文档中找不到它,但 Pickaxe 书在 Ruby and Its World 中提到了它
      猜你喜欢
      • 2013-10-11
      • 2014-03-08
      • 2013-10-22
      • 2016-12-19
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多