Je travaille dans un environnement où nous effectuons une transition lente des machines de Red Hat Enterprise Linux 5 vers RHEL 6.
J'ai besoin de certains de mes scripts pour faire quelque chose de subtilement différent sur les machines RHEL6 de ce qui se fait actuellement sur les machines RHEL5.
La solution pragmatique consiste à vérifier au moment de l'exécution et à exécuter certaines commandes sur RHEL5, d'autres sur RHEL6 et certaines sur les deux.
Un exemple pratique de ceci est que nous utilisons des modules d'environnement et my .bashrc
inclut une module load git
ligne, mais sur les machines RHEL6, cette erreur de commande:
RHEL6 system, git should be installed - not loading module
En regardant dans le module, je trouve le code suivant:
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 {
...
}
Cela semble faire ce que je veux, mais j'espérais quelque chose de plus court.
Alors, quelle est la façon la plus simple de distinguer RHEL5 de RHEL6 dans un script bash?
Idéalement, il devrait être robuste sur différentes versions principales, mais être tolérant aux variations des numéros de version mineurs.
git
module Bash, vous vérifiez s'il existe avant de l'appeler. Quand / s'il apparaît plus tard, les résultats de votre vérification changent, donc soudainement la fonctionnalité commence à fonctionner, sans effort supplémentaire.
lsb_release -r
comprend également d'autres textes, par exemple Release: 5.8
. Comme l' explique Dennis Kaarsemaker , si vous utilisez à la lsb_release -rs
place, vous obtenez juste le numéro.
lsb_release
marche? (-r
devrait vous donner juste le numéro; essayez également-a
de voir tout ce qui est disponible). Si c'est le cas, il s'agit également de fournisseurs croisés.