Saya sedang mengerjakan skrip bash sederhana yang seharusnya dapat berjalan di distribusi Ubuntu dan CentOS (dukungan untuk Debian dan Fedora / RHEL akan menjadi nilai tambah) dan saya perlu tahu nama dan versi distribusi skrip yang sedang dijalankan ( untuk memicu tindakan tertentu, misalnya pembuatan repositori). Sejauh ini yang saya dapat adalah ini:
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
Ini sepertinya berhasil, kembali ubuntu
atau centos
(saya belum mencoba yang lain) sebagai nama rilis. Namun, saya punya perasaan bahwa harus ada cara yang lebih mudah, lebih dapat diandalkan untuk menemukan ini - apakah itu benar?
Itu tidak bekerja untuk RedHat. / etc / redhat-release mengandung: Redhat Linux Entreprise release 5.5
Jadi, versi ini bukan kata ketiga, Anda sebaiknya menggunakan:
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"
*
dengan +
untuk menghindari pembentukan komentar, seharusnya etc/*-release
, sepertinya berhasil.
uname -rv | grep -i "name_of_distro"
dan menggunakan kode keluar?
+-release
berhasil? Secara efektif Anda mencari dengan asumsi itu akan/etc/lsb-release
, jadi mungkin sebut saja itu.