Shell out from ruby while setting an environment variable

前端 未结 5 489
囚心锁ツ
囚心锁ツ 2020-12-06 16:04

I need to shell out to a process while setting an environment variable for it. I tried this one-liner:

system \"RBENV_VERSION=system ruby extconf.rb\"
         


        
5条回答
  •  春和景丽
    2020-12-06 16:34

    Using your same approach, but wrapped up as a block method that temporarily modifies the environment (like the block form of Dir.chdir):

    def with_environment(variables={})
      if block_given?
        old_values = variables.map{ |k,v| [k,ENV[k]] }
        begin
           variables.each{ |k,v| ENV[k] = v }
           result = yield
        ensure
          old_values.each{ |k,v| ENV[k] = v }
        end
        result
      else
        variables.each{ |k,v| ENV[k] = v }
      end
    end
    
    with_environment 'RBENV_VERSION'=>'system' do
      `ruby extconf.rb`
    end
    

提交回复
热议问题