ruby argv parseとかでぐぐるとOptionParserを使うといいっぽい。
ここがすごいわかりやすい。
http://d.hatena.ne.jp/zariganitosh/20100210/1265785723
--helpとか--versoinはdefaultで実装されているらしい。
やってみる。
require 'optparse' OptionParser.new do |opt| opt.on('-a') {|v| p v } opt.on('-b') {|v| p v } opt.parse!(ARGV) end p ARGV C:\Work\www\workspace\ruby\labo\optparse>ruby optparse.rb [] C:\Work\www\workspace\ruby\labo\optparse>ruby optparse.rb -a true [] C:\Work\www\workspace\ruby\labo\optparse>ruby optparse.rb --help Usage: optparse [options] -a -b
まさにこれってのが出る。
optionにないやつを入れると例外が出る。
C:\Work\www\workspace\ruby\labo\optparse>ruby optparse.rb -c optparse.rb:8:in `block in <main>': invalid option: -c (OptionParser::InvalidOption) from optparse.rb:3:in `new' from optparse.rb:3:in `<main>'
例外に飛ぶのはわかるんだけど、例外出してるやつみたことないのでrescueで拾ってるんだろうか。
C:\Work\www\workspace\ruby\labo\optparse>ruby -unko ruby: invalid option -u (-h will show valid options) (RuntimeError) C:\Work\www\workspace\ruby\labo\optparse>gem -unko ERROR: Invalid option: -unko. See 'gem --help'.
例外を拾ってみる。
require 'optparse' OptionParser.new do |opt| begin opt.on('-a') {|v| p v } opt.on('-b') {|v| p v } opt.parse!(ARGV) rescue => e puts e exit 1 end end p ARGV C:\Work\www\workspace\ruby\labo\optparse>ruby optparse.rb -c invalid option: -c
おお、ちゃんと出る。
でもどっちかっていうとinvalid optionのあとにUsageがでるほうがかっこいい気がするけどざっくりみた限り任意のオプションを表示させるメソッドはないっぽい。
optionの内容によって処理を変えたりとかする場合はhashかなんかに入れて置く。optionに引数を入れたり、任意にすることもできる([]が任意)
require 'optparse' opthash = {} OptionParser.new do |opt| begin opt.on('-a') {|v| opthash[:a] = v } opt.on('-b') {|v| opthash[:b] = v } opt.on('-c VAL') {|v| opthash[:c] = v } opt.on('-d [VAL]') {|v| opthash[:d] = v } opt.parse!(ARGV) rescue => e puts e exit 1 end end p opthash p ARGV C:\Work\www\workspace\ruby\labo\optparse>ruby optparse.rb -a -c inoki -d {:a=>true, :c=>"inoki", :d=>nil} []
勉強になる。