我怎样才能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的gem ( gem install launchy
):
require 'launchy' Launchy::Application.new.host_os_family # => :windows, :darwin, :nix, or :cygwin
我有第二个答案,增加更多的select。 os rubygem和github页面有一个相关的项目列表。
需要'os' >> OS.windows? => true#或OS.doze? >> OS.bits => 32 >> OS.java? => true#如果你在jruby中运行。 另外OS.jruby? >> OS.ruby_bin =>“c:\ ruby18 \ 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