在我的Ubuntu开发沙箱中经过最后purging distro ruby packages的努力以取代强烈推荐的rvm后,我必须误解一些基本的东西:
我不想更改所有.rb源文件中的所有shebang行
#!/usr/bin/ruby
进入 / usr / local / rvm / bin / ruby ,也不是任何版本特定的。
我的源文件需要使用系统默认的ruby二进制文件(而不是rvm)与生产服务器上的对应文件保持不变。
保持通用代码一致性的任何建议?我应该一次又一次地将shebangs切换到像
这样的东西#!/usr/bin/env ruby
或(尽管what that link's site says)是否有一些干净的方法让rvm挂钩到/ usr / bin / ruby,假设所有冲突的.deb包已被删除?更不用说,如何让其他.deb软件包依赖于ruby + libs的存在来识别非发行版的红宝石......但这可能是一个单独的问题。
答案 0 :(得分:16)
唯一明智的方法是:
#!/usr/bin/env ruby
它将始终在环境中使用当前选定的ruby,而不依赖于任何工具
答案 1 :(得分:2)
使用env(1) shebang增加了一定程度的复杂性和一系列安全问题,但它是一种常用的解决方案。一个问题是它不连接解释器,但使其特定于每用户PATH值。
您可以使用符号链接替换/usr/bin/ruby
。在现代linux上,递归shebang可以工作,而/ usr / bin / ruby可以是这样的脚本:
#!/bin/sh
exec /some/other/ruby "$@"