EDIT: Por favor, por favor , por favor, lea los dos requisitos que figuran en la parte inferior de este post antes de responder. La gente sigue publicando sus nuevas gemas y bibliotecas y todo eso, que claramente no cumplen con los requisitos.
A veces quiero piratear algunas opciones de la línea de comandos de forma muy económica en un script simple. Una forma divertida de hacerlo, sin tener que lidiar con getopts o parsing ni nada de eso, es:
...
$quiet = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
...
# Deal with ARGV as usual here, maybe using ARGF or whatever.
No es del todo la sintaxis de opciones normal de Unix, porque acepta opciones que no son parámetros de línea de comandos de opciones, como en " myprog -i foo bar -q
", pero puedo vivir con eso. (Algunas personas, como los desarrolladores de Subversion, prefieren esto. A veces yo también.)
Una opción que está presente o ausente no se puede implementar de manera mucho más simple que la anterior. (Una asignación, una llamada a función, un efecto secundario). ¿Existe una forma igualmente sencilla de tratar las opciones que toman un parámetro, como " -f
nombre de archivo "?
EDITAR:
Un punto que no mencioné antes, porque no me había quedado claro hasta que el autor de Trollop mencionó que la biblioteca cabía "en un archivo [de 800 líneas]", es que no solo estoy buscando sintaxis, pero para una técnica que tiene las siguientes características:
La totalidad del código se puede incluir en el archivo de secuencia de comandos (sin abrumar la secuencia de comandos en sí, que puede ser solo un par de docenas de líneas), de modo que uno puede colocar un solo archivo en un
bin
directorio en cualquier sistema con un Ruby 1.8 estándar . [5-7] instalación y uso. Si no puede escribir una secuencia de comandos de Ruby que no tenga declaraciones de requerimiento y donde el código para analizar un par de opciones tenga menos de una docena de líneas, no cumple con este requisito.El código es lo suficientemente pequeño y simple como para que uno pueda recordar lo suficiente como para escribir directamente el código que funcionará, en lugar de cortar y pegar desde otro lugar. Piense en la situación en la que se encuentra en la consola de un servidor con cortafuegos sin acceso a Internet y desea preparar un script rápido para que lo use un cliente. No sé ustedes, pero (además de fallar el requisito anterior) memorizar incluso las 45 líneas de micro-optparse simplificado no es algo que me interese hacer.
getoptlong
y optparse
están en la biblioteca de rubí estándar, por lo que no es necesario copiarlos al desplegar su guión - si rubí funciona en esa máquina, a continuación, require 'optparse'
o require 'getoptlong'
también funcionará.