Estou trabalhando em um script bash simples que deve ser capaz de executar nas distribuições Ubuntu e CentOS (suporte para Debian e Fedora / RHEL seria uma vantagem) e preciso saber o nome e a versão da distribuição que o script está executando ( para acionar ações específicas, por exemplo, a criação de repositórios). Até agora, o que eu tenho é o seguinte:
OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')
if [ -z "$OS" ]; then
OS=$(awk '{print $1}' /etc/*-release | tr '[:upper:]' '[:lower:]')
fi
if [ -z "$VERSION" ]; then
VERSION=$(awk '{print $3}' /etc/*-release)
fi
echo $OS
echo $ARCH
echo $VERSION
Isso parece funcionar, retornando ubuntu
ou centos
(eu não tentei outros) como o nome do release. No entanto, sinto que deve haver uma maneira mais fácil e confiável de descobrir isso - isso é verdade?
Não funciona para o RedHat. / etc / redhat-release contém: Redhat Linux Entreprise release 5.5
Portanto, a versão não é a terceira palavra, é melhor usar:
OS_MAJOR_VERSION=`sed -rn 's/.*([0-9])\.[0-9].*/\1/p' /etc/redhat-release`
OS_MINOR_VERSION=`sed -rn 's/.*[0-9].([0-9]).*/\1/p' /etc/redhat-release`
echo "RedHat/CentOS $OS_MAJOR_VERSION.$OS_MINOR_VERSION"
*
com +
para evitar a formatação de comentários, deve ser etc/*-release
, parece funcionar.
uname -rv | grep -i "name_of_distro"
e usa o código de saída?
+-release
funciona? Efetivamente, você parece assumir que será/etc/lsb-release
, então talvez chame assim.