【问题标题】:/usr/bin/ruby vs. rvm/usr/bin/ruby 与 rvm
【发布时间】:2012-03-22 22:38:01
【问题描述】:

经过我的 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)假设所有冲突的 .deb 软件包都已被删除,rvm 是否有一些干净的方法可以挂接到 /usr/bin/ruby 中?更不用说,如何让其他 .deb 包依赖于 ruby​​+libs 的存在来识别非发行版 ruby​​...但这可能是一个单独的问题。

【问题讨论】:

    标签: ruby ubuntu rvm


    【解决方案1】:

    唯一理智的方法是:

    #!/usr/bin/env ruby
    

    它将始终在环境中使用当前选定的 ruby​​,而不依赖于任何工具

    【讨论】:

      【解决方案2】:

      使用env(1) shebang 会增加一定程度的复杂性和一系列安全问题,但它是一种常用的解决方案。一个问题是它连接解释器,而是使其特定于每个用户的 PATH 值。

      您可以将/usr/bin/ruby 替换为符号链接。在现代 linux 上,递归 shebang 可以工作,/usr/bin/ruby 可以是如下脚本:

       #!/bin/sh
       exec /some/other/ruby "$@"
      

      【讨论】:

      • 在 shebang 中使用脚本仅在 linux 2.6.20+ 上受支持而不在 OSX 上,并且该链接假定您必须更改 ruby​​ 以使整个系统运行此脚本 - 可能不是可接受的解决方案
      • 嗯,是的,递归 shebang 是有问题的。
      • 这对我来说很好,我有一些从 cron 运行的脚本,让它保持不变很方便
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 2012-09-30
      相关资源
      最近更新 更多