Desafortunadamente, Ruby no admite mecanismos de paso como, por ejemplo, AWK:
> awk -v a=1 'BEGIN {print a}'
> 1
Significa que no puede pasar valores con nombre a su script directamente.
Usar las opciones de cmd puede 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
Ruby almacena todos los argumentos de cmd en la ARGV
matriz, el nombre del script se puede capturar utilizando la $PROGRAM_NAME
variable.
La desventaja obvia es que depende del orden de los valores.
Si solo necesita modificadores booleanos, use 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 --
cambio, de lo contrario, Ruby se quejará de una opción inexistente -agreed
, así que páselo como un cambio a su invocación de cmd. No lo necesita en el siguiente caso:
> ruby -s script_with_switches.rb -agreed
> So do I!
La desventaja es que se mete con variables globales y solo tiene valores lógicos verdadero / falso.
Puede acceder a valores desde variables de entorno:
> FIRST_NAME='Andy Warhol' ruby -e 'puts ENV["FIRST_NAME"]'
> Andy Warhol
Los inconvenientes están presentes aquí, debe configurar todas las variables antes de la invocación del script (solo para su proceso de ruby) o exportarlas (shells como BASH):
> export FIRST_NAME='Andy Warhol'
> ruby -e 'puts ENV["FIRST_NAME"]'
En el último caso, sus datos serán legibles para todos en la misma sesión de shell y para todos los subprocesos, lo que puede ser una grave implicación de seguridad.
Y al menos puede implementar un analizador de opciones usando getoptlong y optparse .
¡Feliz pirateo!