检测 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 控制台中按下箭头键

如何检测文件是不是可在 Ruby 中写入?

在 Windows Server 上托管 Ruby 应用程序是不是可行? [关闭]

如何在 Linux 上使用 Ruby 实现实时 USB 存储检测?

gulp-ruby-sass 在 Windows 中不是公认的命令

在 Ruby 中检测没有 getc/gets 的按键(非阻塞)