Para manejar parámetros posicionales utilizando OptionParser, primero analiza los interruptores usando OptionParser y después buscar los argumentos posicionales restantes de ARGV:
# optparse-positional-arguments.rb
require 'optparse'
options = {}
OptionParser.new do |opts|
opts.banner = "Usage: #{__FILE__} [command] [options]"
opts.on("-v", "--verbose", "Run verbosely") do |v|
options[:verbose] = true
end
opts.on("--list x,y,z", Array, "Just a list of arguments") do |list|
options[:list] = list
end
end.parse!
Al ejecutar la secuencia de comandos:
$ ruby optparse-positional-arguments.rb foobar --verbose --list 1,2,3,4,5
p options
# => {:verbose=>true, :list=>["1", "2", "3", "4", "5"]}
p ARGV
# => ["foobar"]
El dothis
o dothat
los comandos pueden estar en cualquier lado El options
hash y ARGV
sigue siendo el mismo, independientemente:
# After options
$ ruby optparse-positional-arguments.rb --verbose --list 1,2,3,4,5 foobar
# In between options
$ ruby optparse-positional-arguments.rb --verbose foobar --list 1,2,3,4,5
De esta manera no puedo estar seguro de si '' dothis' o dothat' fue el primer parámetro, ¿verdad? –
Sí, tienes razón. Puedes pensarlo como 'script [comando] [opciones]'. Donde el comando y las opciones son intercambiables posicionalmente. Entonces también podría ser 'script [opciones] [comando]'. Eso funciona para ti? – csherin
y ¿cuál sería una buena forma de obtener comandos posibles en la cadena de uso? solo pegarlo en el 'opts.banner'? – Paladin