检测 ruby 是不是在 Windows 上运行的正确方法是啥?
Posted
技术标签:
【中文标题】检测 ruby 是不是在 Windows 上运行的正确方法是啥?【英文标题】:What is the correct way to detect if ruby is running on Windows?检测 ruby 是否在 Windows 上运行的正确方法是什么? 【发布时间】:2011-06-19 18:28:04 【问题描述】:在 Ruby 中检测解释器是否在 Windows 上运行的正确方法是什么? “正确”包括它适用于所有主要版本的 Ruby,包括 1.8.x、1.9.x、JRuby、Rubinius 和 IronRuby。
“ruby 检测窗口”目前排名靠前的 Google 搜索结果均不正确或已过时。例如,一种不正确的做法是:
RUBY_PLATFORM =~ /mswin/
这是不正确的,因为它无法检测到 mingw 版本或 Windows 上的 JRuby。
什么是正确的方法?
【问题讨论】:
为了完整起见:我经常看到的另一种 错误 方式是RUBY_PLATFORM =~ /win/
,它也错过了 MinGW 端口(这是现在每个人都实际使用的端口)和更糟糕的是,也匹配达尔文,即OSX。
【参考方案1】:
(File::ALT_SEPARATOR || File::SEPARATOR) == '\\'
【讨论】:
【参考方案2】:原来,有this way:
Gem.win_platform?
【讨论】:
这是来自 RubyGems,它包含在 MRI >= 1.9 中。其他红宝石需要包含宝石才能使用它。很高兴知道,但并不完全符合 OP 的标准。 以下是它匹配的平台:github.com/rubygems/rubygems/blob/…. 这应该是答案。 我同意 JaeGeeTee - 这比正则表达式变体优雅得多,尽管它们也能正常工作。人们可以继续使用相同的代码,而不是每个人都不得不依赖这些自定义的、即席的正则表达式。我会推理 Gem.win_platform 吗?从长远来看,将更易于维护,而正则表达式可能不一定总是正确的,这取决于任何内部更改、不同的操作系统或样式等等。【参考方案3】:首选选项(根据@John 的建议更新):
require 'rbconfig'
is_windows = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
这也可以,但不太可靠(它不适用于旧版本,并且可以修改环境变量)
is_windows = (ENV['OS'] == 'Windows_NT')
(我无法在所有列出的 rubies 或 Windows 7 以外的任何设备上轻松测试,但我知道两者都适用于 1.9.x、IronRuby 和 JRuby)。
【讨论】:
不完整(需要最少的字符数)以上是关于检测 ruby 是不是在 Windows 上运行的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查是不是已在 Ruby 和 Windows 控制台中按下箭头键
在 Windows Server 上托管 Ruby 应用程序是不是可行? [关闭]
如何在 Linux 上使用 Ruby 实现实时 USB 存储检测?