class Vagrant::Util::Env
Public Class Methods
with_clean_env() { || ... }
click to toggle source
Execute the given command, removing any Ruby-specific environment variables. This is an “enhanced” version of ‘Bundler.with_clean_env`, which only removes Bundler-specific values. We need to remove all values, specifically:
-
_ORIGINAL_GEM_PATH
-
GEM_PATH
-
GEM_HOME
-
GEM_ROOT
-
BUNDLE_BIN_PATH
-
BUNDLE_GEMFILE
-
RUBYLIB
-
RUBYOPT
-
RUBY_ENGINE
-
RUBY_ROOT
-
RUBY_VERSION
This will escape Vagrant’s environment entirely, which is required if calling an executable that lives in another Ruby environment. The original environment restored at the end of this call.
@param [Proc] block
the block to execute with the cleaned environment
# File lib/vagrant/util/env.rb, line 38 def self.with_clean_env with_original_env do if ENV["BUNDLE_ORIG_MANPATH"] ENV["MANPATH"] = ENV["BUNDLE_ORIG_MANPATH"] end ENV.delete_if { |k,_| k[0,7] == "BUNDLE_" } if ENV.has_key? "RUBYOPT" ENV["RUBYOPT"] = ENV["RUBYOPT"].sub("-rbundler/setup", "") ENV["RUBYOPT"] = ENV["RUBYOPT"].sub("-I#{File.expand_path('..', __FILE__)}", "") end yield end end
with_original_env() { || ... }
click to toggle source
# File lib/vagrant/util/env.rb, line 4 def self.with_original_env original_env = ENV.to_hash if defined?(::Bundler) && defined?(::Bundler::ORIGINAL_ENV) ENV.replace(::Bundler::ORIGINAL_ENV) end ENV.update(Vagrant.original_env) yield ensure ENV.replace(original_env.to_hash) end