使用OptionParser抑制短参数

时间:2013-10-08 08:23:19

标签: ruby optionparser

我有一个Ruby应用程序,它有一组相对广泛的命令行参数。我想抑制许多选项的“短”变体,以便它们只能用于长(“双短划线”)形式。

我可以以某种方式抑制某些选项的短划线变体吗?

更新2013/10/08

事实证明,确实省略了短变种的作品!但是,对我来说并不是因为在我的程序中由于某种原因所有的短键都以空格为前缀。所以这是一个简单的案例:

require 'optparse'

op = OptionParser.new
op.on(" -f", "--from FORMAT", "Use the specific format") {}
op.on("--flip", "Do a flip") {}
op.parse!

导致异常:

ruby why.rb -f some-foos
why.rb:17:in `<main>': ambiguous option: -f (OptionParser::AmbiguousOption

虽然给出了建议(注意开头报价后缺少空格):

require 'optparse'

OptionParser.new do |opts|
  opts.on("-d", "--ding DING", "Should not conflict with dangerous-option") do
    puts "ding set!"
  end
  opts.on("--dangerous-option", "Set dangerous option") do |v|
    puts "dangerous option set to #{v}"
  end
end.parse!

工作正常。

$ruby dang.rb -d xyz
ding set!

非常感谢 p11y 用一个有效的例子指出我正确的方向。此外,如果这个“领先空间”到位,optparse不会抱怨 - 但它会改变你的短键的解释(或者更好的说,将忽略它们并将它们显示为你的帮助线的一部分! - 仍然改为使用自动生成的密钥。)

1 个答案:

答案 0 :(得分:0)

只需删除简短表格:

require 'optparse'

OptionParser.new do |opts|
  opts.on("--dangerous-option", "Set dangerous option") do |v|
    puts "dangerous option set to #{v}"
  end
end.parse!

$ ruby foo.rb -h
Usage: foo [options]
        --dangerous-option           Set dangerous option

$ ruby foo.rb --dangerous-option
dangerous option set to true