मैं एक साधारण बैश स्क्रिप्ट पर काम कर रहा हूं जो उबंटू और सेंटोस वितरण पर चलने में सक्षम होना चाहिए (डेबियन और फेडोरा / आरएचईएल के लिए समर्थन एक प्लस होगा) और मुझे उस स्क्रिप्ट के वितरण के नाम और संस्करण को जानने की आवश्यकता है जो चल रहा है () विशिष्ट क्रियाओं को ट्रिगर करने के लिए, उदाहरण के लिए रिपॉजिटरी के निर्माण)। अब तक मुझे यही मिला है:
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- रिलीज़ में शामिल हैं: 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
, इसलिए शायद इसे ही कहें।