Wie finde ich heraus, auf welchem ​​Betriebssystem mein Ruby-Programm läuft?

Ich möchte, dass mein Ruby-Programm auf einem Mac andere Dinge macht als auf Windows. Wie kann ich herausfinden, auf welchem ​​System mein Programm läuft?

Verwenden Sie die Konstante RUBY_PLATFORM und RUBY_PLATFORM optional in ein Modul ein, um sie RUBY_PLATFORM zu machen:

 module OS def OS.windows? (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil end def OS.mac? (/darwin/ =~ RUBY_PLATFORM) != nil end def OS.unix? !OS.windows? end def OS.linux? OS.unix? and not OS.mac? end end 

Es ist nicht perfekt, aber es funktioniert gut für die Plattformen, auf denen ich arbeite, und es ist einfach genug, es zu erweitern.

(Warnung: lesen Sie @Peter Wagenet Kommentar) Ich mag dies, die meisten Menschen verwenden Rubygems , ist es zuverlässig, ist plattformübergreifend

 irb(main):001:0> Gem::Platform.local => # irb(main):002:0> Gem::Platform.local.os => "mingw32" 

Update Verwendung in Verbindung mit “Update! Addition! Rubygems heutzutage …” , um zu mildern, wenn Gem::Platform.local.os == 'java'

Entweder

 irb(main):002:0> require 'rbconfig' => true irb(main):003:0> Config::CONFIG["arch"] => "i686-linux" 

oder

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

Probiere das Launchy-Juwel ( gem install launchy ):

 require 'launchy' Launchy::Application.new.host_os_family # => :windows, :darwin, :nix, or :cygwin 

Ich habe eine zweite Antwort, um dem Kampf weitere Optionen hinzuzufügen. Das os rubygem und die github-Seite haben eine verwandte Projektliste .

 erfordert 'os'

 >> OS.windows?
 => true # oder OS.doze?

 >> OS.bits
 => 32

 >> OS.java?
 => true # wenn du in jruby rennst.  Auch OS.jruby?

 >> OS.ruby_bin
 => "c: \ ruby18 \ bin \ ruby.exe" # oder "/ usr / local / bin / ruby" oder was nicht

 >> OS.posix?
 => false # true für Linux, os x, cygwin

 >> OS.mac?  # oder OS.osx?  oder OS.x?
 => falsch
 require 'rbconfig' include Config case CONFIG['host_os'] when /mswin|windows/i # Windows when /linux|arch/i # Linux when /sunos|solaris/i # Solaris when /darwin/i #MAC OS X else # whatever end 

Aktualisieren! Zusatz! Rubygems wird heutzutage mit Gem.win_platform? .

Beispielverwendungen im Rubygems Repo , und dies zur Verdeutlichung:

 def self.ant_script Gem.win_platform? ? 'ant.bat' : 'ant' end 

Bisher haben wir mit dem folgenden Code ziemlich gut gearbeitet

  def self.windows? return File.exist? "c:/WINDOWS" if RUBY_PLATFORM == 'java' RUBY_PLATFORM =~ /mingw32/ || RUBY_PLATFORM =~ /mswin32/ end def self.linux? return File.exist? "/usr" if RUBY_PLATFORM == 'java' RUBY_PLATFORM =~ /linux/ end def self.os return :linux if self.linux? return :windows if self.windows? nil end 

Wenn ich nur wissen muss, ob es ein Windows- oder Unix-ähnliches Betriebssystem ist, reicht es oft aus

 is_unix = is_win = false File::SEPARATOR == '/' ? is_unix = true : is_win = true