我怎样才能find我的Ruby程序运行在哪个操作系统?

我希望我的Ruby程序在Mac上执行不同的操作,而不是在Windows上执行。 我怎样才能知道我的程序在哪个系统上运行?

使用RUBY_PLATFORM常量,并可select将其包装在模块中以使其更友好:

 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 

这不是完美的,但对于我开发的平台来说效果不错,而且很容易扩展。

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

要么

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

(警告:阅读@彼得Wagenet的评论)我喜欢这个,大多数人使用rubygems ,其可靠,是跨平台

 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" 

尝试Launchy的gemgem install launchy ):

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

我有第二个答案,增​​加更多的select。 os ruby​​gem和github页面有一个相关的项目列表。

需要'os'

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

 >> OS.bits
 => 32

 >> OS.java?
 => true#如果你在jruby中运行。 另外OS.jruby?

 >> OS.ruby_bin
 =>“c:\ ruby​​18 \ bin \ ruby​​.exe”#或“/ usr / local / bin / ruby​​”或者什么不是

 >> OS.posix?
 => false#对于linux,os x,cygwin是true

 >> OS.mac?  #或OS.osx? 或OS.x?
 => false
 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 

更新! 加成! Rubygems现在附带Gem.win_platform?

为了清晰起见,在Rubygems仓库中使用了这个例子 ,

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

到目前为止,我们用下面的代码已经做的很好了

  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 

当我只需要知道它是Windows还是类Unix操作系统时,通常就足够了

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