我可以通过多种方式检查正在运行我的 Ruby 代码的平台的操作系统:
RUBY_PLATFORM
:https://dev59.com/TnVC5IYBdhLWcg3w1E1q#171011RbConfig::CONFIG['host_os']
:https://dev59.com/F2gt5IYBdhLWcg3w0w3B#13586108
有可能知道正在运行的 Linux 发行版吗?例如基于 Debian 还是基于 Red Hat 的发行版。
我可以通过多种方式检查正在运行我的 Ruby 代码的平台的操作系统:
RUBY_PLATFORM
:https://dev59.com/TnVC5IYBdhLWcg3w1E1q#171011RbConfig::CONFIG['host_os']
:https://dev59.com/F2gt5IYBdhLWcg3w0w3B#13586108有可能知道正在运行的 Linux 发行版吗?例如基于 Debian 还是基于 Red Hat 的发行版。
如评论部分所指出的那样,似乎没有一种确定的“适用于所有发行版”的方法来完成此操作。接下来是我用来检测脚本运行环境的方式:
def linux_variant
r = { :distro => nil, :family => nil }
if File.exists?('/etc/lsb-release')
File.open('/etc/lsb-release', 'r').read.each_line do |line|
r = { :distro => $1 } if line =~ /^DISTRIB_ID=(.*)/
end
end
if File.exists?('/etc/debian_version')
r[:distro] = 'Debian' if r[:distro].nil?
r[:family] = 'Debian' if r[:variant].nil?
elsif File.exists?('/etc/redhat-release') or File.exists?('/etc/centos-release')
r[:family] = 'RedHat' if r[:family].nil?
r[:distro] = 'CentOS' if File.exists?('/etc/centos-release')
elsif File.exists?('/etc/SuSE-release')
r[:distro] = 'SLES' if r[:distro].nil?
end
return r
end
/etc/system-release
。无论如何,谢谢。 - Arturo Herrero# gem install train
Train.create('local').connection.os[:name] #=> eg. "centos", "linuxmint"
Train.create('local').connection.os[:family] #=> eg. "redhat", "debian"
Facter的操作系统家族事实返回值,例如Ubuntu为“Debian”。使用Facter检索事实的一般形式为Facter [factname] . value
。
# gem install facter
require 'facter'
puts Facter['osfamily'].value
Ohai 的 platform
fact 返回,例如 "Ubuntu 的“debian” 和 CentOS 的“rhel”。使用 Ohai,检索 facts 的一般形式是 node[factname]
。
# gem install ohai
node['platform'] #=> eg. "ubuntu" or "mint"
node['platform_family'] #=> eg. "debian" for Ubuntu and Mint
Platform 可以检索一些基本数据,并且可以很好地区分各种Unix平台。但是,它完全无法处理不同的Linux发行版。 Platform::IMPL
将返回:freebsd、netbsd、hpux等,但所有Linux发行版都只是:linux。 sys-uname 和 sysinfo 类似。 utilinfo 更基础一些,将在除Windows、Mac和Linux之外的任何系统上失败。
require 'facter'
puts Facter['osfamily'].value