Estoy trabajando en un script bash simple que debería poder ejecutarse en distribuciones Ubuntu y CentOS (el soporte para Debian y Fedora / RHEL sería una ventaja) y necesito saber el nombre y la versión de la distribución que ejecuta el script ( para activar acciones específicas, por ejemplo, la creación de repositorios). Hasta ahora lo que tengo es esto:
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
Esto parece funcionar, volviendo ubuntu
o centos
(no he probado otros) como el nombre de la versión. Sin embargo, tengo la sensación de que debe haber una manera más fácil y más confiable de descubrirlo, ¿es eso cierto?
No funciona para RedHat. / etc / redhat-release contiene: Redhat Linux Entreprise versión 5.5
Entonces, la versión no es la tercera palabra, será mejor que uses:
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"
*
con +
de evitar el comentario de formateo, que debería ser etc/*-release
, parece que funciona.
uname -rv | grep -i "name_of_distro"
y usa el código de salida?
+-release
funciona? Efectivamente, estás buscando que así sea/etc/lsb-release
, así que quizás solo llámalo así.