1

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

问题:如何cd在 Ruby 脚本中实现与终端中相同的行为

我试过了:

  • Dir.chdir用`s中的cd命令替换
  • 替换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
4

1 回答 1

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 做同样的事情,你就不需要退出行。

于 2013-01-07T17:10:39.540 回答