Я работаю над простым bash-скриптом, который должен быть в состоянии работать в дистрибутивах Ubuntu и CentOS (поддержка Debian и Fedora / RHEL была бы плюсом), и мне нужно знать имя и версию дистрибутива, в котором работает скрипт ( для того, чтобы вызвать конкретные действия, например, создание хранилищ). Пока что у меня есть это:
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
Это , кажется , работать, возвращаясь ubuntu
или centos
(я не пробовал другие) в качестве имени выпуска. Однако у меня есть ощущение, что должен быть более простой и надежный способ выяснить это - правда ли это?
Это не работает для RedHat. / etc / redhat-release содержит: Redhat Linux Entreprise выпуск 5.5
Итак, версия не третье слово, вам лучше использовать:
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"
*
на, +
чтобы избежать формирования комментариев, должно быть etc/*-release
, это похоже на работу.
uname -rv | grep -i "name_of_distro"
и не использует код выхода?
+-release
работает? По сути, вы ищете, если это/etc/lsb-release
так, так что, возможно, просто назовите это так.