No puede exportar variables de entorno al shell en el que se ejecuta el script de ruby, pero puede escribir un script de ruby que crea un archivo bash de capacidad de origen.
Por ejemplo
% 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
%
Otra alternativa es que el uso de ENV[]=
sí establece variables de entorno para carcasas parciales abiertas desde dentro del proceso de rubí. Por ejemplo:
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
Esto puede ser muy potente si se combina con el comando exec
de la cáscara, que sustituirá a la cáscara exterior con el proceso de rubí (de modo que al salir de la carcasa interior, la cáscara auto exterior -existe también, evitando cualquier confusión de "Creo que establecí esa variable en este shell".
# open terminal
% exec pass_var.rb BAZ
3
% echo $BAZ
3
% exit
# terminal closes
He visto [una pregunta similar] (http://stackoverflow.com/questions/190168/persisting-an-environment-variable-through-ruby) pero yo no estoy satisfecho ed con la respuesta específica de la plataforma. – wilhelmtell