Ruby中命名的命令行参数

Mis*_*enn 16 ruby

有没有办法将命名参数传递给Ruby脚本?

我理解传递参数的ARGV方法,但这需要它们按特定顺序.我想做的是传递命名参数,类似于其他命令行操作.例如:

$ ruby someRubyScript.rb -a argumentA -b argumentB
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

Mar*_*mas 22

有几种选择.

  • 标准库中的OptionParser是最受欢迎的选项之一.它可以完全按照您的要求进行操作,API也很棒.

  • GetOptLong也在标准库中,它重新实现了POSIX样式的命令行.如果要模拟Unix命令行应用程序,可以执行所有操作.

  • Ara T. Howard's Main是创建命令行脚本的绝佳宝石.它超越了解析参数并创建自动使用和帮助提示,所有这些都使用一个很好的DSL来指定命令行选项.

2014年更新

一些新的宝石已经上升到流行:

  • Slop提供了一个非常简单的API,可以最大限度地减少使用OptionParser编写的代码量.

  • Highline在技​​术上不是命令行参数解析器,而是一种提示用户输入数据的方法,完成验证.这可以与上述之一结合使用,以提供完整的交互式CLI.


Ark*_*kan 5

您可以使用OptionParser轻松执行一些args解析.

require 'optparse'

hash_options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: your_app [options]"
  opts.on('-a [ARG]', '--argument_a [ARG]', "Specify the argument_a") do |v|
    hash_options[:argument_a] = v
  end
  opts.on('-b [ARG]', '--argument_b [ARG]', "Specify the argument_b") do |v|
    hash_options[:argument_b] = v
  end
  opts.on('--version', 'Display the version') do 
    puts "VERSION"
    exit
  end
  opts.on('-h', '--help', 'Display this help') do 
    puts opts
    exit
  end
end.parse!
Run Code Online (Sandbox Code Playgroud)

然后您的应用程序将需要启动为:

ruby application -a=12 -b=42 or
ruby application --argument_a=12 --argument_b=42
Run Code Online (Sandbox Code Playgroud)

这是文档:

http://www.ensta.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/optparse/rdoc/classes/OptionParser.html