Pracuję nad prostym skryptem bash, który powinien być w stanie uruchomić na dystrybucjach Ubuntu i CentOS (wsparcie dla Debiana i Fedory / RHEL byłoby plusem) i muszę znać nazwę i wersję dystrybucji, w której działa skrypt ( w celu uruchomienia określonych działań, na przykład tworzenia repozytoriów). Jak dotąd mam to:
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
Wygląda na to, że działa, powraca ubuntu
lub centos
(nie próbowałem innych) jako nazwa wydania. Mam jednak wrażenie, że musi istnieć łatwiejszy i bardziej niezawodny sposób na znalezienie tego - czy to prawda?
To nie działa dla RedHat. / etc / redhat-release zawiera: Redhat Linux Entreprise wydanie 5.5
Więc wersja nie jest trzecim słowem, lepiej użyj:
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"
*
w +
celu uniknięcia komentarz formatowania, powinno być etc/*-release
, wydaje się działać.
uname -rv | grep -i "name_of_distro"
i nie używa kodu wyjścia?
+-release
działa? Efektywnie wyglądasz, zakładając, że tak będzie/etc/lsb-release
, więc może po prostu nazwij to tak.