Desafortunadamente, Ruby no es compatible con un mecanismo de paso como, por ejemplo, AWK:
> awk -v a=1 'BEGIN {print a}'
> 1
Significa que no puede pasar valores con nombre directamente a su secuencia de comandos.
Utilización de opciones de CMD pueden ayudar:
> ruby script.rb val_0 val_1 val_2
# script.rb
puts ARGV[0] # => val_0
puts ARGV[1] # => val_1
puts ARGV[2] # => val_2
tiendas de Ruby todos los argumentos CMD en el array ARGV
, la scriptname sí mismo puede ser capturado utilizando la variable $PROGRAM_NAME
.
La desventaja obvia es que depende del orden de los valores.
Si necesita sólo interruptores booleanas utilizan la opción -s
del intérprete Ruby:
> ruby -s -e 'puts "So do I!" if $agreed' -- -agreed
> So do I!
Tenga en cuenta el interruptor --
, de lo contrario Rubí se quejará de una opción inexistente -agreed
, por lo que pasarlo como un interruptor a su cmd invocacionUsted no lo necesita en el siguiente caso:
> ruby -s script_with_switches.rb -agreed
> So do I!
La desventaja es que meterse con las variables globales y tienen valores de verdadero/falso lógico.
Se puede acceder a los valores de las variables de entorno:
> FIRST_NAME='Andy Warhol' ruby -e 'puts ENV["FIRST_NAME"]'
> Andy Warhol
Los inconvenientes están presentes aquí para, usted tiene que fijar todas las variables antes de la invocación de la escritura (sólo para el proceso de rubí) o para exportarlos (conchas como BASH):
> export FIRST_NAME='Andy Warhol'
> ruby -e 'puts ENV["FIRST_NAME"]'
en este último caso, sus datos serán legibles para todos en la misma sesión de shell y para todos los subprocesos, que pueden ser una consecuencia grave de seguridad.
Y al menos puede implementar un analizador de opciones usando getoptlong y optparse.
Happy hacking!
me gustaría señalar explícitamente que argv [0] no apunta al nombre del programa, como algunos otros lenguajes. Para obtener el nombre del programa, consulte http://stackoverflow.com/questions/4834821/how-can-i-get-the-name-of-the-command-called-for-usage-prompts-in-ruby –