Pracuję w środowisku, w którym powoli przenosimy maszyny z Red Hat Enterprise Linux 5 na RHEL 6.
Potrzebuję niektórych moich skryptów, aby zrobić coś subtelnie innego na maszynach RHEL6 niż to, co jest obecnie wykonywane na maszynach RHEL5.
Pragmatycznym rozwiązaniem jest sprawdzenie w czasie wykonywania i uruchomienie niektórych poleceń na RHEL5, innych na RHEL6 i niektórych na obu.
Praktycznym przykładem tego jest to, że używamy modułów środowiska, a mój .bashrc
zawiera module load git
wiersz, ale na maszynach RHEL6 to polecenie powoduje błędy:
RHEL6 system, git should be installed - not loading module
Przeglądając plik modułu, znajduję następujący kod:
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 {
...
}
Wydaje się, że robi to, co chcę, ale liczyłem na coś krótszego.
Więc jaki jest najłatwiejszy sposób, aby powiedzieć RHEL5 z RHEL6 w skrypcie bash?
Idealnie powinien być solidny w różnych głównych wersjach, ale tolerować zmiany w mniejszych numerach wydań.
git
modułu Bash, przed wywołaniem sprawdzasz, czy istnieje. Kiedy pojawi się / jeśli pojawi się później, wyniki czeku zmieniają się, więc nagle funkcja zaczyna działać, bez dodatkowego wysiłku.
lsb_release -r
zawiera także inny tekst, np Release: 5.8
. Jak wyjaśnia Dennis Kaarsemaker , jeśli użyjesz lsb_release -rs
zamiast tego, otrzymasz tylko numer.
lsb_release
działa? (-r
powinien podać ci tylko numer; spróbuj także-a
zobaczyć wszystko, co jest dostępne). Jeśli tak, to również między sprzedawcami.