Malheureusement, Ruby ne prend pas en charge un tel mécanisme de passage comme par exemple AWK:
> awk -v a=1 'BEGIN {print a}'
> 1
Cela signifie que vous ne pouvez pas passer directement des valeurs nommées dans votre script.
L'utilisation des options cmd peut aider:
> 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 stocke tous les arguments cmd dans le ARGV
tableau, le nom de script lui-même peut être capturé à l'aide de la $PROGRAM_NAME
variable.
L'inconvénient évident est que vous dépendez de l'ordre des valeurs.
Si vous n'avez besoin que de commutateurs booléens, utilisez l'option -s
de l'interpréteur Ruby:
> ruby -s -e 'puts "So do I!" if $agreed' -- -agreed
> So do I!
Veuillez noter le --
commutateur, sinon Ruby se plaindra d'une option inexistante -agreed
, alors passez-la comme commutateur à votre invocation cmd. Vous n'en avez pas besoin dans le cas suivant:
> ruby -s script_with_switches.rb -agreed
> So do I!
L'inconvénient est que vous jouez avec les variables globales et n'avez que des valeurs logiques vrai / faux.
Vous pouvez accéder aux valeurs des variables d'environnement:
> FIRST_NAME='Andy Warhol' ruby -e 'puts ENV["FIRST_NAME"]'
> Andy Warhol
Les inconvénients sont présents ici, vous devez définir toutes les variables avant l'invocation du script (uniquement pour votre processus ruby) ou les exporter (shells comme BASH):
> export FIRST_NAME='Andy Warhol'
> ruby -e 'puts ENV["FIRST_NAME"]'
Dans ce dernier cas, vos données seront lisibles pour tout le monde dans la même session shell et pour tous les sous-processus, ce qui peut être une grave implication pour la sécurité.
Et au moins, vous pouvez implémenter un analyseur d'options en utilisant getoptlong et optparse .
Bon piratage!