2010-12-15 28 views
12

名前付き引数をRubyスクリプトに渡す方法はありますか?Rubyの名前付きコマンドライン引数

私はパラメータを渡すARGVメソッドを理解していますが、これは特定の順序である必要があります。私がしたいのは、他のコマンドライン操作と同様に、名前付き引数を渡すことです。たとえば、

$ ruby someRubyScript.rb -a argumentA -b argumentB 

答えて

19

-fカップルのオプションがありますようにGetoptLongは-fileのようなPOSIXスタイルのオプションならびに単一文字のオプションが可能になります。

  • OptionParserは、最も一般的なものの1つです。それはあなたが望むものを正確に行うことができ、APIは素晴らしいです。

  • GetOptLongも標準ライブラリにあり、POSIXスタイルのコマンドラインを再実装します。 Unixのコマンドラインアプリケーションをエミュレートしたい場合は、これをすべて実行できます。

  • アラートT.ハワードのMainは、コマンドラインスクリプトを作成する際の素晴らしい宝である。それは引数を解析することを超え、コマンドラインオプションを指定するための優れたDSLを使用して、自動使用とプロンプトの作成を行います。

2014更新

カップルの新しい宝石が人気に上昇している:

  • SlopはあなたのOptionParserを使用して記述しなければならないコードの量を最小限に幻想シンプルなAPIを提供。

  • Highlineは、技術的にはコマンドライン引数パーサーではなく、ユーザーにデータの入力を求め、検証を完了する方法です。これを上記のいずれかと組み合わせて、完全な対話型CLIを提供することができます。

+0

ああ。ありがとう、私はこれらを見て、彼らは完璧だと思います。 OptionParserの場合は+1 – Misterbenn

+1

+1 –

5

OptionParserを使用すると、いくつかのargs解析を簡単に実行できます。ここで

ruby application -a=12 -b=42 or 
ruby application --argument_a=12 --argument_b=42 

はドキュメントです:

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

+0

を私はあなたが '='の間に置くとは思いませんオプションと引数 –

+1

@ Mark Thomas、optparseはオプションとその値の間に空白、 '='、または何も入れません。 MRI 1.8.7でテストされています。 –

2

Rubyの標準ライブラリには、何をやるべきGetOptLongが付属していますよう

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! 

次に、あなたのアプリケーションが起動する必要があります。欲しいです。

2

Trollopは、フィーチャー、宣言型、コンパクトです。それは明らかに宝石として使用可能ですが、それは(比較的小さい)単一のファイルなので、いつでもあなたのプロジェクトにコピーすることができます。あなたはhttps://github.com/wycats/thor

1

## Usage: program [options] 
## --verbose, -v Verbose mode 
## --logfile=NAME Log filename 

require 'easyoptions' 

if EasyOptions.options[:verbose] 
    puts EasyOptions.options[:logfile] 
    puts EasyOptions.arguments[0] 
end 
+0

http://whatisthor.comがより良いURLになるかもしれません。しかし、ええ、Thorの+1。 – webmat

0

EasyOptionsで利用できる宝石トールを使用することができます深刻なCLIアプリケーションは、コードの解析を必要としないため

require 'trollop' 
opts = Trollop::options do 
    opt :monkey, "Use monkey mode"      # flag --monkey, default false 
    opt :goat, "Use goat mode", :default => true  # flag --goat, default true 
    opt :num_limbs, "Number of limbs", :default => 4 # integer --num-limbs <i>, default to 4 
    opt :num_thumbs, "Number of thumbs", :type => :int # integer --num-thumbs <i>, default nil 
end 
#=> {:monkey => false, :goat => true, :num_limbs => 4, :num_thumbs => nil} 
関連する問題