OptionParser では、オプションを必須にすることができますが、その値を省略すると、後続のオプションの名前が値として使用され、残りのコマンド ライン解析が台無しになります。オプションの値をエコーするテスト ケースを次に示します。
$ ./test_case.rb --input foo --output bar
output bar
input foo
最初のオプションの値を省略します。
$ ./test_case.rb --input --output bar
input --output
別のオプション名を値として取るのを防ぐ方法はありますか? ありがとう!
テストケースコードは次のとおりです。
#!/usr/bin/env ruby
require 'optparse'
files = Hash.new
option_parser = OptionParser.new do |opts|
opts.on('-i', '--input FILENAME', 'Input filename - required') do |filename|
files[:input] = filename
end
opts.on('-o', '--output FILENAME', 'Output filename - required') do |filename|
files[:output] = filename
end
end
begin
option_parser.parse!(ARGV)
rescue OptionParser::ParseError
$stderr.print "Error: " + $! + "\n"
exit
end
files.keys.each do |key|
print "#{key} #{files[key]}\n"
end