Я працюю над простим сценарієм 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
, тому, можливо, просто так називайте.