Lavoro in un ambiente in cui stiamo lentamente spostando le macchine da Red Hat Enterprise Linux 5 a RHEL 6.
Ho bisogno di alcuni dei miei script per fare qualcosa di leggermente diverso sulle macchine RHEL6 rispetto a quello che si sta attualmente facendo sulle macchine RHEL5.
La soluzione pragmatica è quella di verificare in fase di esecuzione ed eseguire alcuni comandi su RHEL5, altri su RHEL6 e alcuni su entrambi.
Un esempio pratico di ciò è che stiamo usando i moduli di ambiente e my .bashrc
include una module load git
linea, ma su macchine RHEL6 questo errore di comando:
RHEL6 system, git should be installed - not loading module
Guardando nel file modulo trovo il seguente codice:
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 {
...
}
Questo sembra fare quello che voglio, ma speravo in qualcosa di più corto.
Quindi, qual è il modo più semplice per dire RHEL5 da RHEL6 in uno script bash?
Idealmente, dovrebbe essere robusto tra le diverse versioni principali, ma essere tollerante alle variazioni nei numeri di versione minori.
git
modulo Bash, controlli se esiste prima di chiamarlo. Quando / se appare più tardi, i risultati del tuo controllo cambiano, quindi all'improvviso la funzione inizia a funzionare, senza alcuno sforzo aggiuntivo.
lsb_release -r
include anche altro testo, ad es Release: 5.8
. Come spiega Dennis Kaarsemaker , se si utilizza lsb_release -rs
invece si ottiene solo il numero.
lsb_release
il lavoro? (-r
dovrebbe darti solo il numero; prova anche-a
a vedere tutto disponibile) In tal caso, è anche cross-vendor.