ฉันทำงานในสภาพแวดล้อมที่เราค่อยๆเปลี่ยนเครื่องจาก Red Hat Enterprise Linux 5 เป็น RHEL 6
ฉันต้องการสคริปต์บางส่วนของฉันเพื่อทำสิ่งที่แตกต่างอย่างละเอียดบนเครื่อง RHEL6 กับสิ่งที่กำลังทำอยู่บนเครื่อง RHEL5
วิธีแก้ปัญหาในทางปฏิบัติคือการตรวจสอบที่รันไทม์และเรียกใช้คำสั่งบางอย่างบน RHEL5, อื่น ๆ บน RHEL6 และบางคำสั่งทั้งสอง
ตัวอย่างการใช้งานจริงของสิ่งนี้คือเรากำลังใช้โมดูลสภาพแวดล้อมและฉัน.bashrc
มีmodule load git
บรรทัด แต่ในเครื่อง RHEL6 ข้อผิดพลาดของคำสั่งนี้:
RHEL6 system, git should be installed - not loading module
มองหา modulefile ฉันพบรหัสต่อไปนี้:
set redhatrelease [eval exec "cat /etc/redhat-release"]
if { [regexp -nocase {release 6} $redhatrelease] } {
puts stderr "\n\t RHEL6 system, git should be installed - not loading module\n"
} else {
...
}
ดูเหมือนว่าจะทำสิ่งที่ฉันต้องการ แต่ฉันหวังว่าจะมีบางสิ่งที่สั้นกว่านี้
ดังนั้นวิธีที่ง่ายที่สุดในการบอก RHEL5 จาก RHEL6 ใน bash script คืออะไร
เป็นการดีที่จะมีความแข็งแกร่งในเวอร์ชันหลักที่แตกต่างกัน แต่ต้องทนต่อการเปลี่ยนแปลงของจำนวนรุ่นย่อย
git
โมดูล Bash คุณจะตรวจสอบว่ามีอยู่หรือไม่ก่อนที่จะเรียกมัน เมื่อ / หากปรากฏขึ้นภายหลังผลการตรวจสอบของคุณจะเปลี่ยนดังนั้นทันใดนั้นคุณสมบัติก็เริ่มทำงานโดยไม่ต้องใช้ความพยายามใด ๆ เพิ่มเติม
lsb_release -r
รวมถึงข้อความอื่น ๆ Release: 5.8
ด้วยเช่น ดังที่เดนนิสคาร์เซเมเกอร์อธิบายแม้ว่าหากคุณใช้lsb_release -rs
แทนคุณจะได้รับเพียงตัวเลข
lsb_release
ทำงานหรือไม่ (-r
ควรให้หมายเลขแค่ให้ลอง-a
ดูทุกอย่างที่มี) ถ้าเป็นเช่นนั้นนั่นก็คือผู้ค้าข้าม