Vous ne pouvez pas exporter les variables d'environnement vers le shell dans lequel le script ruby s'exécute, mais vous pouvez écrire un script ruby qui crée un fichier bash source.
Par exemple
% echo set_var.rb
#!/usr/bin/env ruby
varname = ARGV[0]
puts "#{varname}=#{STDIN.gets.chomp}"
% set_var.rb FOO
1
FOO=1
% set_var.rb BAR > temp.sh ; . temp.sh
2
% echo $BAR
2
%
Une autre alternative est que l'utilisation ENV[]=
ne définit les variables d'environnement pour les sous-couches ouvertes à partir du processus de rubis. Par exemple:
outer-bash% echo pass_var.rb
#!/usr/bin/env ruby
varname = ARGV[0]
ENV[varname] = STDIN.gets.chomp
exec '/usr/bin/env bash'
outer-bash% pass_var.rb BAZ
quux
inner-bash% echo $BAZ
quux
Cela peut être très puissant si vous le combinez avec commande exec
de la coque, qui remplacera la coque extérieure du processus rubis (de sorte que lorsque vous sortez de la coque intérieure, l'auto enveloppe extérieure -exite aussi, empêchant toute confusion "Je pensais que j'ai mis cette variable dans cette coquille").
# open terminal
% exec pass_var.rb BAZ
3
% echo $BAZ
3
% exit
# terminal closes
J'ai vu [une question similaire] (http://stackoverflow.com/questions/190168/persisting-an-environment-variable-through-ruby) mais j'ai ne suis pas satisfi ed avec la réponse spécifique à la plate-forme. – wilhelmtell