Eu trabalho em um ambiente em que estamos migrando lentamente as máquinas do Red Hat Enterprise Linux 5 para o RHEL 6.
Eu preciso de alguns dos meus scripts para fazer algo sutilmente diferente nas máquinas RHEL6 do que está sendo feito atualmente nas máquinas RHEL5.
A solução pragmática é verificar no tempo de execução e executar alguns comandos no RHEL5, outros no RHEL6 e alguns nos dois.
Um exemplo prático disso é que estamos usando módulos de ambiente e my .bashrcinclui uma module load gitlinha, mas nas máquinas RHEL6, este comando erro:
RHEL6 system, git should be installed - not loading module
Olhando no modulefile, encontro o seguinte 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 {
...
}
Isso parece fazer o que eu quero, mas eu esperava algo mais curto.
Então, qual é a maneira mais fácil de diferenciar o RHEL5 do RHEL6 em um script bash?
Idealmente, ele deve ser robusto em diferentes versões principais, mas tolerar variações nos números de versão menores.
gitmódulo Bash, verifique se ele existe antes de chamá-lo. Quando / se aparecer mais tarde, os resultados da sua verificação mudam; de repente, o recurso começa a funcionar, sem nenhum esforço extra.
lsb_release -rinclui outro texto, por exemplo Release: 5.8. Como explica Dennis Kaarsemaker , no entanto, se você usar lsb_release -rs, obtém apenas o número.
lsb_releaseo trabalho? (-rdeve fornecer apenas o número; tente também-aver tudo disponível) Nesse caso, também é um fornecedor cruzado.