48

有没有办法在 ruby​​ 中检测操作系统?我正在开发一个需要检测 Mac 与 Windows 的 SketchUp 工具。

4

4 回答 4

73

您可以使用os宝石:

gem install os

接着

require 'os'
OS.linux?   #=> true or false
OS.windows? #=> true or false
OS.java?    #=> true or false
OS.bsd?     #=> true or false
OS.mac?     #=> true or false
# and so on.

见:https ://github.com/rdp/os

于 2013-12-14T04:38:36.350 回答
60

这是我最近看到的最好的一个。它来自硒。我认为它是最好的原因是它使用了 rbconfig host_os 字段,该字段具有在 MRI 和 JRuby 上工作的优势。RUBY_PLATFORM 将在 JRuby 上显示“java”,而不管它运行的主机操作系统如何。您将需要稍微调整此方法:

  require 'rbconfig'

  def os
    @os ||= (
      host_os = RbConfig::CONFIG['host_os']
      case host_os
      when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
        :windows
      when /darwin|mac os/
        :macosx
      when /linux/
        :linux
      when /solaris|bsd/
        :unix
      else
        raise Error::WebDriverError, "unknown os: #{host_os.inspect}"
      end
    )
  end
于 2012-11-27T14:13:10.627 回答
28

您可以使用

puts RUBY_PLATFORM

irb(main):001:0> RUBY_PLATFORM
=> "i686-linux"

但是@Pete 是对的。

于 2012-08-02T19:07:45.223 回答
3

您可以检查RUBY_PLATFORM常量,但已知在某些情况下这是不可靠的,例如在运行 JRuby 时。其他选项包括在 POSIX 系统上捕获uname -a命令的输出,或使用检测 gem,例如sys-uname

于 2012-08-02T19:11:10.790 回答