Ubuntu ve CentOS dağıtımlarında çalışabilmesi gereken basit bir bash betiği üzerinde çalışıyorum (Debian ve Fedora / RHEL desteği artı olabilir) ve betiğin çalıştığı dağıtımın adını ve sürümünü bilmem gerekiyor ( belirli eylemleri tetiklemek için, örneğin havuzların oluşturulması). Şimdiye dek elimde olan şu:
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
Bu işe yarayacak gibi görünüyor , ubuntu
ya da centos
(başkalarını denemedim) sürümün adı olarak. Bununla birlikte, bunu keşfetmenin daha kolay ve daha güvenilir bir yolu olması gerektiğini hissediyorum - bu doğru mu?
RedHat için çalışmıyor. / etc / redhat-release içerir: Redhat Linux Girişim sürümü 5.5
Yani, sürüm üçüncü kelime değil, daha iyi kullanmalısınız:
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"
*
ile yer değiştirdim +
, olması gerektiği etc/*-release
gibi görünüyor.
uname -rv | grep -i "name_of_distro"
ve çıkış kodunu kullanmıyor?
+-release
yaradığından emin misin? Etkili olacağını varsayıyor gibi görünüyorsun/etc/lsb-release
, bu yüzden belki de öyle diyorsun.