ฉันทำงานกับสคริปต์ทุบตีง่าย ๆ ที่ควรจะสามารถทำงานบน 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
ดังนั้นอาจจะเรียกว่า