我有一个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就不会抱怨--但它会改变对短键的解释(或者更好地说,它会忽略它们,并显示它们作为帮助线的一部分!--并且仍然使用自动生成的键)。
发布于 2013-10-08 08:32:39
只需去掉简短的表格:
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 truehttps://stackoverflow.com/questions/19242638
复制相似问题