Je travaille sur un script bash simple qui devrait pouvoir fonctionner sur les distributions Ubuntu et CentOS (la prise en charge de Debian et de Fedora / RHEL serait un plus) et j'ai besoin de connaître le nom et la version de la distribution que le script exécute ( afin de déclencher des actions spécifiques, par exemple la création de référentiels). Jusqu'à présent, voici ce que j'ai:
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
Cela semble fonctionner, revenir ubuntu
ou centos
(je n'ai pas essayé d'autres) comme nom de version. Cependant, j’ai le sentiment qu’il doit exister un moyen plus facile et plus fiable de le savoir - est-ce vrai?
Cela ne fonctionne pas pour RedHat. / etc / redhat-release contient: Redhat Linux Entreprise version 5.5
Donc, la version n'est pas le troisième mot, vous feriez mieux d'utiliser:
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"
*
par +
pour éviter les commentaires de formatage, cela devrait être etc/*-release
, cela semble fonctionner.
uname -rv | grep -i "name_of_distro"
et utilise le code de sortie?
+-release
marche? Effectivement, vous pensez que ce sera le cas/etc/lsb-release
, alors appelez simplement cela.