Infelizmente, Ruby não suporta mecanismos de passagem como, por exemplo, AWK:
> awk -v a=1 'BEGIN {print a}'
> 1
Isso significa que você não pode passar valores nomeados diretamente para o seu script.
O uso das opções de cmd pode ajudar:
> 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 armazena todos os argumentos de cmd na ARGV
matriz, o próprio nome do script pode ser capturado usando o comando$PROGRAM_NAME
variável
A desvantagem óbvia é que você depende da ordem dos valores.
Se você precisar apenas de comutadores booleanos, use a opção -s
do interpretador Ruby:
> ruby -s -e 'puts "So do I!" if $agreed' -- -agreed
> So do I!
Observe a --
opção, caso contrário, Ruby reclamará de uma opção inexistente -agreed
; portanto, passe-a como uma opção para sua invocação de cmd. Você não precisa disso no seguinte caso:
> ruby -s script_with_switches.rb -agreed
> So do I!
A desvantagem é que você mexe com variáveis globais e possui apenas valores lógicos verdadeiros / falsos.
Você pode acessar valores de variáveis de ambiente:
> FIRST_NAME='Andy Warhol' ruby -e 'puts ENV["FIRST_NAME"]'
> Andy Warhol
As desvantagens estão presentes aqui, você deve definir todas as variáveis antes da chamada do script (apenas para o processo ruby) ou exportá-las (shells como BASH):
> export FIRST_NAME='Andy Warhol'
> ruby -e 'puts ENV["FIRST_NAME"]'
Neste último caso, seus dados serão legíveis para todos na mesma sessão de shell e para todos os subprocessos, o que pode ser uma séria implicação de segurança.
E pelo menos você pode implementar um analisador de opções usando getoptlong e optparse .
Feliz hacking!