Leider unterstützt Ruby keinen Übergabemechanismus wie z. B. AWK:
> awk -v a=1 'BEGIN {print a}'
> 1
Dies bedeutet, dass Sie benannte Werte nicht direkt an Ihr Skript übergeben können.
Die Verwendung von cmd-Optionen kann helfen:
> ruby script.rb val_0 val_1 val_2
puts ARGV[0]
puts ARGV[1]
puts ARGV[2]
Ruby speichert alle cmd-Argumente im ARGV
Array. Der Skriptname selbst kann mithilfe der $PROGRAM_NAME
Variablen erfasst werden .
Der offensichtliche Nachteil ist, dass Sie von der Reihenfolge der Werte abhängen.
Wenn Sie nur Boolesche Schalter benötigen, verwenden Sie die Option -s
des Ruby-Interpreters:
> ruby -s -e 'puts "So do I!" if $agreed' -- -agreed
> So do I!
Bitte beachten Sie den --
Schalter, andernfalls beschwert sich Ruby über eine nicht vorhandene Option -agreed
. Übergeben Sie ihn daher als Schalter an Ihren cmd-Aufruf. Sie brauchen es im folgenden Fall nicht:
> ruby -s script_with_switches.rb -agreed
> So do I!
Der Nachteil ist, dass Sie mit globalen Variablen herumspielen und nur logische True / False-Werte haben.
Sie können über Umgebungsvariablen auf Werte zugreifen:
> FIRST_NAME='Andy Warhol' ruby -e 'puts ENV["FIRST_NAME"]'
> Andy Warhol
Hierbei gibt es Nachteile: Sie müssen alle Variablen vor dem Skriptaufruf festlegen (nur für Ihren Ruby-Prozess) oder sie exportieren (Shells wie BASH):
> export FIRST_NAME='Andy Warhol'
> ruby -e 'puts ENV["FIRST_NAME"]'
Im letzteren Fall sind Ihre Daten für alle in derselben Shell-Sitzung und für alle Unterprozesse lesbar, was schwerwiegende Auswirkungen auf die Sicherheit haben kann.
Und zumindest können Sie einen Optionsparser mit getoptlong und optparse implementieren .
Viel Spaß beim Hacken!