Ruby的內置OptionParser做這很好。與OpenStruct結合它和你家免費:
require 'optparse'
options = {}
OptionParser.new do |opt|
opt.on('--first_name FIRSTNAME') { |o| options[:first_name] = o }
opt.on('--last_name LASTNAME') { |o| options[:last_name] = o }
end.parse!
puts options
options
將包含參數和值作爲哈希。
保存和運行,在不帶參數的結果在命令行:
$ ruby test.rb
{}
帶參數運行它:
$ ruby test.rb --first_name=foo --last_name=bar
{:first_name=>"foo", :last_name=>"bar"}
這個例子是使用哈希包含的選項,但你可以使用OpenStruct,這將導致您的請求使用:
require 'optparse'
require 'ostruct'
options = OpenStruct.new
OptionParser.new do |opt|
opt.on('-f', '--first_name FIRSTNAME', 'The first name') { |o| options.first_name = o }
opt.on('-l', '--last_name LASTNAME', 'The last name') { |o| options.last_name = o }
end.parse!
puts options.first_name + ' ' + options.last_name
$ ruby test.rb --first_name=foo --last_name=bar
foo bar
I噸甚至自動生成你的-h
或--help
選項:
$ ruby test.rb -h
Usage: test [options]
--first_name FIRSTNAME
--last_name LASTNAME
您可以使用短標誌太:
require 'optparse'
options = {}
OptionParser.new do |opt|
opt.on('-f', '--first_name FIRSTNAME') { |o| options[:first_name] = o }
opt.on('-l', '--last_name LASTNAME') { |o| options[:last_name] = o }
end.parse!
puts options
運行,通過它的步伐:
$ ruby test.rb -h
Usage: test [options]
-f, --first_name FIRSTNAME
-l, --last_name LASTNAME
$ ruby test.rb -f foo --l bar
{:first_name=>"foo", :last_name=>"bar"}
可以很容易地添加內聯解釋對於選項太:
OptionParser.new do |opt|
opt.on('-f', '--first_name FIRSTNAME', 'The first name') { |o| options[:first_name] = o }
opt.on('-l', '--last_name LASTNAME', 'The last name') { |o| options[:last_name] = o }
end.parse!
和:
$ ruby test.rb -h
Usage: test [options]
-f, --first_name FIRSTNAME The first name
-l, --last_name LASTNAME The last name
OptionParser還支持參數轉換成類型,如整數或數組。有關更多示例和信息,請參閱文檔。
你也應該看看相關的問題右側列表:
https://www.ruby-toolbox.com/categories/CLI_Option_Parsers – 2014-10-18 00:06:13
如果我沒有弄錯,Highline好像是l ike helper的功能是要求用戶輸入。所以我會用Highline讓我的控制檯說'First Name:'並等待他們的輸入。我應該看一個特定的功能嗎? – 2014-10-18 00:09:10
有許多寶石可以選擇;該網站對這些庫進行分類並按照流行度進行排序。我甚至寫了我自己的gem,叫做'acclaim',它確實支持'--option = value'語法。不過,我還沒有時間來維護自由軟件項目。你應該選擇一個更好支持的庫。 – 2014-10-18 00:12:56