2012-08-02 50 views
37

有没有办法在红宝石中检测操作系统?我正在开发一个将需要检测MAC与WINDOWS的sketchup工具。在红宝石中检测操作系统

+4

你能不能给我们更多周围的细节*为什么*你需要这样做?通常,功能检测可能比全面的操作系统检测更有帮助。 – Pete 2012-08-02 19:05:27

回答

20

您可以使用

puts RUBY_PLATFORM

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

但@Pete是正确的。

+0

只是想让人们知道,如果你在64位窗口上运行32位ruby,RUBY_PLATFORM会告诉你体系结构是32位的。 – max 2014-11-26 06:06:43

+1

当使用JRuby时,无论操作系统如何,RUBY_PLATFORM都会返回“java”。 – robertodecurnex 2014-12-03 18:53:30

+0

这足以用于检测您是否在OSX上。 – Mosselman 2017-02-27 15:47:23

1

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

48

这是我最近见过的最好的一个。它来自硒。我认为这是最好的原因是它使用rbconfig host_os字段,它具有在MRI和JRuby上工作的优势。 RUBY_PLATFORM将在JRuby上说'java',而不管它运行在哪个主机os上。您将需要适度调整这个方法:

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 
+0

不错,但我认为你应该更新你的答案来记录“os”宝石,它已经解决了您提到的JRuby问题,并获得了我们您的代码库的检测代码。 请参阅:http://stackoverflow.com/a/20579735/109561 – Gerry 2015-01-22 22:45:40

+0

这也是一个很好的方法,如果你不能安装一个系统的宝石。就像我目前正在处理的情况一样,我正在构建一个低级系统脚本,该脚本无法在需要知道os版本的位置安装任何内容。 <3 – 2017-10-19 08:07:58

54

可以使用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

+0

感谢您的发现。真棒回答。 :)可悲的是,你有两年的投票时间赶上。 – Gerry 2015-01-22 22:41:55