是否可以在子shell中重置rbenv

时间:2017-02-22 07:22:06

标签: ruby rbenv

我有一个ruby脚本,我用它来收集其他几个源代码库的信息。代码看起来像这样:

def grab_deps(repo)
  Dir.chdir(repo) do
    if system('bundle check')
      raise "#{repo} does not have all dependencies installed, run `bundle install`"
    else
      `ruby -e 'Gem.loaded_specs.keys.each{ ... }'`
    end
  end
end

这些repos中的每一个都指定了不同的.ruby-version。不幸的是,因为这个脚本在我已经完成rbenv init shell集成的shell中运行,所以这些.ruby版本不受尊重,而且版本不匹配。

我对文档和Google进行了仔细研究,但没有找到任何方法来重置子shell的rbenv。理想情况下,我想要Bundler.with_clean_env

我有两个半解决方案:

  1. 删除shell集成并在脚本内部使用rbenv命令。这可能是最可靠的,但它对我的工作流程也有害,因为我通常在默认情况下需要所有shell中的rbenv。
  2. 直接在ruby脚本中黑客攻击PATHRBENV_VERSION和其他变种。我至少可以通过这种方式使用不同的ruby版本来获得子shell,但它很脏,很脆,并且违反了rbenv内部的一些内容。
  3. 我非常接近放弃并使顶级脚本成为shell脚本,但它会比ruby版本更加丑陋,我真的希望让它干净​​利落。有什么想法吗?

0 个答案:

没有答案