Rubyで環境変数をエクスポートする 質問する

Rubyで環境変数をエクスポートする 質問する

Ruby スクリプト内から親シェルに環境変数をエクスポートするにはどうすればよいでしょうか? たとえば、readBash 組み込みの単純な実装を実装します。

#!/usr/bin/ruby

varname = ARGV[0]
ENV[varname] = STDIN.gets  # but have varname exported to the parent process

ベストアンサー1

Ruby スクリプトが実行されるシェルに環境変数をエクスポートすることはできませんが、ソース可能な bash ファイルを作成する Ruby スクリプトを作成することはできます。

例えば

% cat 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
%

もう 1 つの方法は、 を使用すると、ENV[]=Ruby プロセス内から開かれたサブシェルの環境変数が設定されます。例:

outer-bash% cat 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 

これをシェルのコマンドと組み合わせると、非常に強力になります。execこのコマンドは、外側のシェルを Ruby プロセスに置き換えます (内側のシェルを終了すると、外側のシェルも自動的に終了し、「このシェルでその変数を設定したと思った」という混乱を防ぎます)。

# open terminal
% exec pass_var.rb BAZ
3
% echo $BAZ
3
% exit
# terminal closes

おすすめ記事