在ruby脚本中使用cd时尊重rvmrc

时间:2013-01-07 10:58:46

标签: ruby git rvm rvmrc

背景:我在MRI 1.9.2p320中写了一个简短的脚本来更新我的所有项目 - http://git.io/eez8Kg。我用于更新/拉取自身(git-up)的工具也能够在发现更改的Gemfile后自动捆绑项目。问题是,当我在Ruby脚本中更改目录时,它不尊重项目的rvmrc / gemset(每个项目都有自己的gemset)。

问题:如何让Ruby脚本中的cd与我的终端中的行为相同

我试过了:

  • 在`s
  • 中用cd命令替换Dir.chdir
  • 在前面加Dir.chdir
  • 的`s中用cd命令替换zsh -ci

代码:

Find.find('../..') do |f|
  if f =~ /\.git$/
    repository = f.gsub /\.git$/, ''
    Logger.new(STDOUT).info('Checking '){repository}
    Dir.chdir(repository){
      puts `git up`
    }
  end
end

1 个答案:

答案 0 :(得分:0)

Open3.html#popen3 FTW

zshin, zshout, zsherr = Open3.popen3('zsh') # Open new shell
zshin.puts 'cd ~/Projects/superimportant_project' # Change directory
zshin.puts 'rvm-prompt' # Verify rvmrc is respected
zshin.puts 'exit' # Exit the shell
while (line = zshout.gets)
  puts line
end

退出shell不是强制性的,但是例如rvm-prompt保持挂起,不会发生任何其他事情。如果你用ls尝试同样的事情,你就不需要退出线了。