我正在尝试使用 rbenv(带有插件)和捆绑器来防弹我们的一些 rake 任务。但是,命令的 rbenv 垫片版本(例如bundle
)取决于首先运行它(通常在.bashrc
或其同等版本中找到):
eval "$(rbenv init -)"
这扩展到 shell 命令,使 rbenv 和插件在 shell 中正常工作。这也意味着在我的机器上的交互式 bash shell 中正常工作的 rake 任务通常不会工作,例如从 /bin/sh 或另一台机器上调用。
我想做的是在 rake 中为 shell 调用一次,然后继续使用该 shell 来调用 rake 中的其他命令。那可能吗?
如果不是,我可以将一个 shell 产生的变量和 shell 函数连续复制到后续的 shell 吗?
还是我留下了类似的东西
eval "$(rbenv init -)" && other_command
或者
rbenv exec bundle exec other_command
(后者似乎有自己的问题)。
我也对“你做错了”战略重置持开放态度,模数躲避 rvm 与 rbenv jihads。
更新:
在回答下面@konsolebox 的问题时,我可能想在我的 rake 文件中使用的 ruby 函数可能看起来像这样:
def rbenv_sh(command)
%x(eval "$(rbenv init -)" && #{command})
end
这将确保command
它将在正确的 rbenv 上下文中运行,而不依赖于点初始化文件。我只是在寻找比这更好的东西。