Ich arbeite in einer Umgebung, in der wir langsam Maschinen von Red Hat Enterprise Linux 5 auf RHEL 6 umstellen.
Ich benötige einige meiner Skripte, um auf RHEL6-Maschinen etwas anderes zu tun als derzeit auf RHEL5-Maschinen.
Die pragmatische Lösung besteht darin, zur Laufzeit einige Befehle auf RHEL5, andere auf RHEL6 und einige auf beiden auszuführen.
Ein praktisches Beispiel hierfür ist, dass wir Umgebungsmodule verwenden und my .bashrc
eine module load git
Zeile enthält, auf RHEL6-Computern jedoch die folgenden Befehlsfehler auftreten:
RHEL6 system, git should be installed - not loading module
Im Modulfile finde ich folgenden Code:
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 {
...
}
Dies scheint zu tun, was ich will, aber ich hatte auf etwas Kürzeres gehofft.
Was ist der einfachste Weg, RHEL5 von RHEL6 in einem Bash-Skript zu unterscheiden?
Idealerweise sollte es für verschiedene Hauptversionen robust sein, aber Abweichungen bei kleineren Versionsnummern tolerieren.
git
Bash-Modul benötigt, prüfen Sie, ob es vorhanden ist, bevor Sie es aufrufen. Wenn / falls es später erscheint, ändern sich die Ergebnisse Ihres Schecks, sodass die Funktion plötzlich ohne zusätzlichen Aufwand funktioniert.
lsb_release -r
enthalten auch anderen Text, z Release: 5.8
. Wie Dennis Kaarsemaker jedoch erklärtlsb_release -rs
, erhalten Sie nur die Nummer , wenn Sie stattdessen verwenden.
lsb_release
Arbeit? (-r
sollte Ihnen nur die Nummer geben; versuchen Sie auch-a
, alle verfügbaren zu sehen) Wenn ja, ist das auch herstellerübergreifend.