我在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
视为命令可能需要一个额外的补丁,但值得一试。我将尝试在本地重新创建您的问题,并进行同样的验证。