Trabajo en un entorno en el que estamos haciendo una transición lenta de máquinas de Red Hat Enterprise Linux 5 a RHEL 6.
Necesito algunos de mis scripts para hacer algo sutilmente diferente en las máquinas RHEL6 a lo que se está haciendo actualmente en las máquinas RHEL5.
La solución pragmática es verificar en tiempo de ejecución y ejecutar algunos comandos en RHEL5, otros en RHEL6 y algunos en ambos.
Un ejemplo práctico de esto es que estamos usando módulos de entorno y mi .bashrc
incluye una module load git
línea, pero en las máquinas RHEL6, este error de comando:
RHEL6 system, git should be installed - not loading module
Buscando en el archivo de módulo encuentro el siguiente código:
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 {
...
}
Esto parece hacer lo que quiero, pero esperaba algo más corto.
Entonces, ¿cuál es la forma más fácil de distinguir RHEL5 de RHEL6 en un script bash?
Idealmente, debería ser robusto en las diferentes versiones principales, pero tolerar las variaciones en los números de versiones menores.
git
módulo Bash, verifique si existe antes de llamarlo. Cuando / si aparece más tarde, los resultados de su verificación cambian, por lo que de repente la función comienza a funcionar, sin ningún esfuerzo adicional.
lsb_release -r
incluye otro texto, por ejemplo Release: 5.8
. Como Dennis Kaarsemaker explica , sin embargo, si se utiliza lsb_release -rs
en su lugar, se obtiene sólo el número.
lsb_release
el trabajo? (-r
debería darte solo el número; intenta también-a
ver todo lo que esté disponible) Si es así, también es un proveedor cruzado.