【问题标题】:Wrapping a UNIX / Linux / OS X Binary in Ruby用 Ruby 封装 UNIX / Linux / OS X 二进制文件
【发布时间】:2010-12-23 23:31:37
【问题描述】:

我正在创建一个包含 UNIX/Linux/OS X 命令的基本 gem,并希望确保正确加载 PATH(即,当在乘客下运行 ruby​​-on-rails 应用程序时,它具有“/usr/bin” )。这是一个简单的例子来说明我想要做什么(实际的例子更复杂):

module Silly
  def self.tail(path)
    `tail #{path}`
  end
end

应该和/或我可以在 ruby​​ 中将常用文件夹添加到 PATH 吗?如果不是,直接引用/usr/bin/tail(或该目录中的任何其他二进制文件)是否可以,或者它们是否位于不同系统上的不同目录中?谢谢!

【问题讨论】:

    标签: ruby linux unix path


    【解决方案1】:

    您可以使用ENV 全局哈希访问环境变量,例如ENV['PATH'] = ENV['PATH'] + ':/usr/bin'。可以使用/bin/sh 调用命令,因为这可能会自动设置路径。

    【讨论】:

      【解决方案2】:

      在 Linux 和 Mac OS 上,您可以使用 which 让操作系统告诉您特定命令的首选版本在哪里。例如:

      Greg:stackoverflow greg$ which ls
      /bin/ls
      Greg:stackoverflow greg$ which find
      /usr/bin/find
      Greg:stackoverflow greg$ which ruby
      /Users/greg/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
      

      请注意,它选择了 我的 对 Ruby 的偏好,而不是 /usr/bin 或 /usr/local/bin 中的偏好。这很重要,因为用户或系统管理员可能有非常正当的理由来安装新版本的命令、别名或软链接其他内容或删除它。如果您假设您比他们更了解,您最终可能会执行一个旧的和错误的版本,或者忽略用户的首选环境。

      如果您熟悉 Perl,CPAN 应用程序会在配置默认值时进行大量环境感知,但它始终会询问通过发现确定的默认值是否正确,并允许用户更改或删除它。它还知道具有类似功能的替代应用程序,例如使用 ftp、nftp 或 wget 检索文件。某些命令在操作系统中不可用。甚至 Unix 和/或 Linux 的风格也会有所不同。在 MacOS、Cygwin 和其他类 Unix 环境中折腾,你会发现许多不同的名称代表相同的功能。

      【讨论】:

        猜你喜欢
        • 2010-12-29
        • 1970-01-01
        • 2017-10-24
        • 1970-01-01
        • 2010-09-30
        • 2015-11-17
        • 2012-03-14
        • 2018-07-04
        • 1970-01-01
        相关资源
        最近更新 更多