Frage 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?


75
2017-10-04 20:36


Ursprung


Antworten:


Benutze die RUBY_PLATFORM Konstante und optional in ein Modul einbinden, um es freundlicher 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.


124
2017-10-04 21:17



(Warnung: lesen Sie @Peter Wagenet Kommentar) Ich mag das, die meisten Leute benutzen Rubineist zuverlässig, ist plattformübergreifend

irb(main):001:0> Gem::Platform.local
=> #<Gem::Platform:0x151ea14 @cpu="x86", @os="mingw32", @version=nil>
irb(main):002:0> Gem::Platform.local.os
=> "mingw32"

aktualisieren in Verbindung mit verwenden "Update! Zusatz! Rubygems heutzutage ..." abmildern wann Gem::Platform.local.os == 'java'


20
2017-10-16 18:29



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"

15
2017-10-04 20:41



Probieren Sie den Launchy-Edelstein (gem install launchy):

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

6
2017-10-05 00:18



Ich habe eine zweite Antwort, um dem Kampf weitere Optionen hinzuzufügen.   Das os rubygem, und das github Seite hat 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

6
2018-01-13 02:28



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

4
2017-10-17 15:22



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

Beispielverwendungen im Rubygems Repound dies zur Verdeutlichung:

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

4
2017-12-03 09:31