Sfortunatamente, Ruby non supporta questo meccanismo di passaggio come ad esempio AWK:
> awk -v a=1 'BEGIN {print a}'
> 1
Significa che non puoi passare direttamente i valori nominati nel tuo script.
L'uso delle opzioni cmd può aiutare:
> 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 memorizza tutti gli argomenti cmd ARGV
nell'array, lo scriptname stesso può essere catturato usando la $PROGRAM_NAME
variabile.
L'ovvio svantaggio è che si dipende dall'ordine dei valori.
Se hai bisogno solo di switch booleani usa l'opzione -s
dell'interprete Ruby:
> ruby -s -e 'puts "So do I!" if $agreed' -- -agreed
> So do I!
Nota l' --
interruttore, altrimenti Ruby si lamenterà di un'opzione inesistente -agreed
, quindi passalo come interruttore al tuo invocazione cmd. Non è necessario nel seguente caso:
> ruby -s script_with_switches.rb -agreed
> So do I!
Lo svantaggio è che si scherza con le variabili globali e si hanno solo valori veri / falsi logici.
È possibile accedere ai valori dalle variabili di ambiente:
> FIRST_NAME='Andy Warhol' ruby -e 'puts ENV["FIRST_NAME"]'
> Andy Warhol
Gli svantaggi sono presenti qui a, devi impostare tutte le variabili prima dell'invocazione dello script (solo per il tuo processo ruby) o esportarle (shell come BASH):
> export FIRST_NAME='Andy Warhol'
> ruby -e 'puts ENV["FIRST_NAME"]'
In quest'ultimo caso, i tuoi dati saranno leggibili per tutti nella stessa sessione della shell e per tutti i sottoprocessi, il che può essere una seria conseguenza per la sicurezza.
E almeno puoi implementare un parser di opzioni usando getoptlong e optparse .
Happy hacking!