我有一个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
。
我有两个半解决方案:
PATH
,RBENV_VERSION
和其他变种。我至少可以通过这种方式使用不同的ruby版本来获得子shell,但它很脏,很脆,并且违反了rbenv内部的一些内容。我非常接近放弃并使顶级脚本成为shell脚本,但它会比ruby版本更加丑陋,我真的希望让它干净利落。有什么想法吗?