2012-08-02 53 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