我工作的环境中,我们正在慢慢地将计算机从 Red Hat Enterprise Linux 5 过渡到 RHEL 6。
我需要一些脚本在 RHEL6 计算机上执行与当前在 RHEL5 计算机上执行的操作略有不同的操作。
务实的解决方案是在运行时检查并在 RHEL5 上运行一些命令,在 RHEL6 上运行其他命令,在两者上运行一些命令。
一个实际的例子是,我们正在使用环境模块,并且我.bashrc
包含一行module load git
,但在 RHEL6 计算机上此命令错误:
RHEL6 system, git should be installed - not loading module
查看模块文件,我发现以下代码:
set redhatrelease [eval exec "cat /etc/redhat-release"]
if { [regexp -nocase {release 6} $redhatrelease] } {
puts stderr "\n\t RHEL6 system, git should be installed - not loading module\n"
} else {
...
}
这似乎符合我的要求,但我希望能做得更短。
那么,在 bash 脚本中区分 RHEL5 和 RHEL6 最简单的方法是什么?
理想情况下,它应该在不同的主要版本中保持稳健,但可以容忍次要版本号的变化。
答案1
if grep -q -i "release 6" /etc/redhat-release
then
echo "running RHEL 6.x"
fi
这将是我能想到的最简单的方法。
答案2
您也可以使用该lsb_release
命令。如果您已经确定它是 RHEL,则获取主版本号的方法是:
majversion=$(lsb_release -rs | cut -f1 -d.)
答案3
major_version=$(rpm -q --queryformat '%{RELEASE}' rpm | grep -o [[:digit:]]*\$)
rpm -q --queryformat '%{RELEASE}' rpm
打印类似的东西25.el7
。然后只需取最后一位数字即可。在 RHEL 5、6、7 和 Fedora 24 上进行了测试。
正如其他人指出的,lsb-version
可能无法安装。此外,至少有一个 RHEL5 系统未redhat-release-server
安装该软件包。
答案4
这是获得此结果的另一种更精确的方法。 RHEL 中的内核包包含字符串“elN”,其中 N 代表操作系统的主要版本。因此,可以运行以下命令来识别 RHEL 的版本:
# uname -r | sed 's/^.*\(el[0-9]\+\).*$/\1/'
这将返回一个字符串“el5”、“el6”或“el7”,具体取决于给定主机上的匹配字符串。