Estoy trabajando en una herramienta de búsqueda de línea de comando que busca a través de los archivos de origen utilizando una palabra clave determinada. Uso optparse
para analizar las opciones de la línea de comandos. Por ahora se ve así:
qs -p ~/Desktop/project -k line
si no se proporciona ningún argumento -p
, uso el directorio predeterminado (actual):
qs -k line
Pero, lo que realmente quiero es hacer lo mismo que arriba pero sin -k
, así:
qs line
Por ahora tengo esto:
OptionParser.new do |options|
options.banner = "Usage: qs [options] [path] [keyword]\n" \
"\nSearch through files for a given keyword at specified path.\n" \
"If path is no specified current directory used by default."
options.separator ""
options.separator "Specific options:"
options.on("--no-rec", "Looking in files only at that level.") do |r|
$values[:recursion] = r
end
options.on('-p', '--path PATH', String, 'Path where to start search') do |path|
$values[:path] = path
end
options.on('-k', '--key WORD', String, 'Word you are looking for ') do |key|
$values[:keyword] = key
end
options.on_tail("-h" , "--help", "Help documentation.") do
$stderr.puts options
exit 1
end
end.parse!
Como puede ver, es imposible hacer algo como esto:
$values[:keyword] = ARGV[2]
porque no hay garantía de que todos los argumentos estén presentes.
¿Es posible hacer esto sin perder todo el apoyo de optparse
?
Gracias de antemano.
- SuperManEver
SourceCuando usa parse!
(con !
), Optparse elimina las opciones de ARGV
, por lo que luego cualquier otro los elementos (que Optparse no reconoce) estarán en ARGV[0]
en adelante.
Entonces deberías poder hacer algo como esto:
OptionParser.new do |options|
# as before, but without k option
end.parse!
# At this point all the options optparse knows about will be
# removed from ARGV, so you can get at what's left:
$values[:keyword] = ARGV[0]