Ich arbeite an einem einfachen Bash-Skript, das auf Ubuntu- und CentOS-Distributionen ausgeführt werden kann (Unterstützung für Debian und Fedora / RHEL wäre von Vorteil), und ich muss den Namen und die Version der Distribution kennen, die das Skript ausführt ( um bestimmte Aktionen auszulösen, zum Beispiel das Anlegen von Repositories). Bisher habe ich Folgendes:
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
Dies scheint zu funktionieren und als Release-Name zurückzukehren ubuntu
oder centos
(ich habe es noch nicht mit anderen versucht). Ich habe jedoch das Gefühl, dass es einen einfacheren und zuverlässigeren Weg geben muss, dies herauszufinden - stimmt das?
Bei RedHat funktioniert das nicht. / etc / redhat-release enthält: Redhat Linux Entreprise Version 5.5
Die Version ist also nicht das dritte Wort, Sie sollten Folgendes verwenden:
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"
*
mit +
dem Kommentar Formatierung zu vermeiden, sollte es sein etc/*-release
, scheint es zu funktionieren.
uname -rv | grep -i "name_of_distro"
und benutzt einen Exit-Code?
+-release
funktioniert? Sie gehen davon aus, dass dies tatsächlich der Fall/etc/lsb-release
ist. Nennen Sie es also einfach so.