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 .bashrc
inclui uma module load git
linha, 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.
git
mó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 -r
inclui 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_release
o trabalho? (-r
deve fornecer apenas o número; tente também-a
ver tudo disponível) Nesse caso, também é um fornecedor cruzado.