2012-08-02 14 views
37

Gibt es eine Möglichkeit, das Betriebssystem in Ruby zu erkennen? Ich arbeite an der Entwicklung eines Sketchup-Tools, das MAC und WINDOWS erkennen muss.Erkennen von Betriebssystemen in Ruby

+4

Können Sie uns mehr Details um * warum * musst du das tun? Oft kann die Feature-Erkennung hilfreicher sein als die Erkennung von Blanket-Betriebssystemen. – Pete

Antwort

20

können Sie

puts RUBY_PLATFORM

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

verwenden Aber @Pete ist richtig.

+0

wollte nur die Leute wissen lassen, dass RUBY_PLATFORM Ihnen zeigt, dass die Architektur 32 Bit ist, wenn Sie einen 32-Bit-Ruby auf einem 64-Bit-Fenster ausführen. – max

+1

RUBY_PLATFORM gibt "java" zurück, wenn JRuby verwendet wird, unabhängig vom Betriebssystem. – robertodecurnex

+0

Dies reicht aus, um festzustellen, ob Sie OSX verwenden oder nicht. – Mosselman

1

Sie können die RUBY_PLATFORM Konstante überprüfen, aber dies ist bekannt, in bestimmten Fällen unzuverlässig zu sein, z. B. wenn JRuby ausgeführt wird. Andere Optionen umfassen die Erfassung der Ausgabe des Befehls uname -a auf POSIX-Systemen oder die Verwendung eines Erkennungs-Edelsteins wie sys-uname.

48

Hier ist der beste, den ich in letzter Zeit gesehen habe. Es ist von Selen. Der Grund, warum ich denke, dass es das Beste ist, ist, dass es das Feld rbconfig host_os verwendet, was den Vorteil hat, dass es an MRI und JRuby arbeitet. RUBY_PLATFORM wird auf JRuby "java" sagen, unabhängig davon, auf welchem ​​Host es läuft. Sie müssen leicht, diese Methode optimieren:

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

Schön, aber ich denke, Sie sollten Ihre Antwort aktualisieren, um sich zu notieren das "os" -Gemein, das bereits das erwähnte JRuby-Problem anspricht und diesen Erkennungscode unserer Code-Basis erhält. Siehe: http://Stackoverflow.com/a/20579735/109561 – Gerry

+0

Dies ist auch eine gute Methode, wenn Sie einen Edelstein in ein System installieren können. Wie in dem Fall, an dem ich gerade arbeite, wo ich ein Low-Level-Systemskript erstelle, das keinen Zugriff darauf hat, irgendetwas an dem Punkt zu installieren, wo ich die OS-Version kennen muss. <3 –

54

Sie können die os gem verwenden:

gem install os 

Und dann

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. 

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

+0

Danke, dass Sie das gefunden haben. Tolle Antwort. :) Leider haben Sie zwei Jahre der Abstimmung, um nachzuholen. – Gerry