Non è possibile esportare le variabili di ambiente nella shell in cui viene eseguito lo script ruby, ma è possibile scrivere uno script ruby che crei un file bash sorgente.
Ad esempio
% 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
%
Un'altra alternativa è che usando ENV[]=
non imposta variabili di ambiente per subshells aperte dall'interno del processo rubino. Per esempio:
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
Questo può essere molto potente se si combinano con il comando exec
della shell, che sostituirà l'esterno-shell con il processo di rubino (in modo che quando si esce dal guscio interno, il guscio automatico esterno -esulta pure, impedendo qualsiasi confusione di "Pensavo di impostare quella variabile in questa shell").
# open terminal
% exec pass_var.rb BAZ
3
% echo $BAZ
3
% exit
# terminal closes
Ho visto [una domanda simile] (http://stackoverflow.com/questions/190168/persisting-an-environment-variable-through-ruby) ma io Non sono soddisfatto con la risposta specifica della piattaforma. – wilhelmtell