在 Ruby 中,如何正确地检测解释器是否在 Windows 上运行?“正确”包括适用于所有主要的 Ruby 版本,包括 1.8.x、1.9.x、JRuby、Rubinius 和 IronRuby。
目前谷歌搜索“ruby detect windows”的排名最高的结果都是不正确或已过时的。例如,一个不正确的方法是:
RUBY_PLATFORM =~ /mswin/
这是不正确的,因为它无法检测mingw版本或Windows上的JRuby。
正确的方法是什么呢?
在 Ruby 中,如何正确地检测解释器是否在 Windows 上运行?“正确”包括适用于所有主要的 Ruby 版本,包括 1.8.x、1.9.x、JRuby、Rubinius 和 IronRuby。
目前谷歌搜索“ruby detect windows”的排名最高的结果都是不正确或已过时的。例如,一个不正确的方法是:
RUBY_PLATFORM =~ /mswin/
这是不正确的,因为它无法检测mingw版本或Windows上的JRuby。
正确的方法是什么呢?
原来有这种方法:
Gem.win_platform?
首选项(根据@John的建议更新):
require 'rbconfig'
is_windows = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
这种方法也可以工作,但不够可靠(它不能在旧版本上工作,并且环境变量可能会被修改)
is_windows = (ENV['OS'] == 'Windows_NT')
(我无法轻松地在列出的所有Ruby版本或除Windows 7之外的任何操作系统上进行测试,但我知道两者都适用于1.9.x、IronRuby和JRuby)。
etc
不需要安装,它与Ruby一起提供。require "etc"
def check_system
return "windows" if Etc.uname[:sysname] == "Windows_NT"
return "linux" if Etc.uname[:sysname] == "Linux"
end
(File::ALT_SEPARATOR || File::SEPARATOR) == '\\'
RUBY_PLATFORM =~ /win/
,这也忽略了MinGW端口(这是现在每个人实际使用的端口),更糟糕的是,它还匹配了Darwin即OSX。 - Jörg W Mittag