我可以檢查該平臺的操作系統運行我的Ruby代碼在幾個方面:檢測Linux發行版/平臺的Ruby
RUBY_PLATFORM
:https://stackoverflow.com/a/171011/462015RbConfig::CONFIG['host_os']
:https://stackoverflow.com/a/13586108/462015
是否有可能知道Linux發行版正在運行?例如基於Debian或基於Red Hat的發行版。
我可以檢查該平臺的操作系統運行我的Ruby代碼在幾個方面:檢測Linux發行版/平臺的Ruby
RUBY_PLATFORM
:https://stackoverflow.com/a/171011/462015RbConfig::CONFIG['host_os']
:https://stackoverflow.com/a/13586108/462015是否有可能知道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
這不是一個完整的解決方案來處理地球上每個GNU/Linux發行版。實際上遠非如此。例如,它不區分OpenSUSE和SUSE Linux Enterprise Server,雖然它們是兩個截然不同的野獸。此外,即使只有幾個發行版,它也是一個意大利麪條。但它可能是一個可能能夠建立的東西。
你可以找到分佈檢測的從Facter這是用來除其他事物的 source code一個更完整的例子,以事實饋送到配置管理系統Puppet。
我很感謝您的回答,但這看起來很可怕,並且不適用於所有環境,如亞馬遜實例你需要在'/ etc/system-release'中看到。無論如何,謝謝。 – 2014-10-14 09:47:31
也許有用:http://www.cyberciti.biz/faq/find-linux-distribution-name-version-number/ – 2014-09-22 11:37:36