我可以通过几种方式检查运行我的Ruby代码的平台的操作系统:
RUBY_PLATFORM
:https://stackoverflow.com/a/171011/462015RbConfig::CONFIG['host_os']
:https://stackoverflow.com/a/13586108/462015的一个或多个字符
有可能知道运行的是什么Linux发行版吗?例如基于Debian的发行版或基于Red Hat的发行版。
我可以通过几种方式检查运行我的Ruby代码的平台的操作系统:
RUBY_PLATFORM
:https://stackoverflow.com/a/171011/462015RbConfig::CONFIG['host_os']
:https://stackoverflow.com/a/13586108/462015的一个或多个字符有可能知道运行的是什么Linux发行版吗?例如基于Debian的发行版或基于Red Hat的发行版。
3条答案
按热度按时间eni9jsuy1#
正如上面的评论部分所指出的,似乎没有确定的“在每个发行版中都有效”的方法来做到这一点。下面是我用来检测脚本正在运行的环境类型的方法:
字符串
这不是一个完整的解决方案来处理地球上的每一个GNU/Linux发行版。事实上,远非如此。例如,它没有区分OpenSUSE和SUSE Linux Enterprise Server,尽管它们是两个完全不同的野兽。此外,即使只有几个发行版,它也是一个相当意大利面条。但它可能是一个可以构建的东西。
您可以从Facter的source code中找到一个更完整的分布检测示例,该示例用于向配置管理系统Puppet提供事实。
ej83mcc02#
一个Linux发行版是一个软件的集合,通常通过它们的包管理器、窗口系统、窗口管理器和桌面环境来区分。这是很多可互换的部分。如果一个系统保留了包管理器,但改变了窗口系统和桌面环境,我们会称之为新的发行版吗?没有明确的答案,所以各种工具会给出给予略有不同的答案。
**Train**有一个whole hierarchy发行版系列,可能是最复杂的一个。这里是Train和Ohai的快速比较。它被设计为通过网络连接运行,但在本地也工作得很好,如下所示:
字符串
**Facter**的osfamily fact返回,例如Ubuntu的“Debian”。使用Facter,检索事实的一般形式是
Facter[factname].value
。型
**Ohai**的
platform_family
事实返回,例如Ubuntu的“debian”和CentOS的“rhel”。使用Ohai,检索事实的一般形式是node[factname]
。型
不区分平台的Ruby系统信息库
Platform检索一些基本数据,可以很好地区分各种Unix平台。但是,它根本不处理不同的Linux发行版。
Platform::IMPL
将返回:freebsd,:netbsd,:hpux等,但所有Linux发行版都只是:linux。sys-uname和sysinfo类似。**utilinfo**更基本,在Windows、Mac和Linux以外的任何系统上都将失败。xeufq47z3#
字符串