Ruby脚本shebang与rbenv和卸载项目所需的版本



我在bin/setup的Ruby应用程序中有一个脚本,它以:开头

#!/usr/bin/env ruby

env告诉哪些可执行文件是可访问的,如果$PATH上有Ruby版本,脚本应该使用它来执行。

假设我使用的是rbenv,并且我有一个全局Ruby版本集(或者是system,它在OSX上回退到/usr/bin/ruby)或其他什么。system或我的全局Ruby版本与在执行此bin/setup脚本的方向上声明的.ruby-version不同。.ruby-version文件包含2.1.6。这导致脚本立即中止:

rbenv: version `2.1.6' is not installed (set by /Users/olivierlacan/project/.ruby-version)

这意味着没有办法依靠env来动态获取这个bin/setup脚本应该使用的Ruby的适当版本。

我找到的唯一替代方案是:

#!/usr/bin/ruby

但这对于任何没有像OS X那样在/usr/bin/中安装Ruby的Linux或Windows操作系统来说都是不可移植的。有办法解决这个问题吗?

在特定Ruby版本中以及全局安装gem时,由于rbenv-which解析命令的方式,rbenv中似乎也存在类似的问题。

GitHub用户@yyuu(Python fork pyenv的维护者)的rbenv-which-ext扩展至少解决了这个问题。以同样的方式将ruby视为命令可能需要一个额外的补丁,但值得一试。我将尝试在本地重新创建您的问题,并进行同样的验证。

相关内容

  • 没有找到相关文章

最新更新