Tôi làm việc trong một môi trường nơi chúng tôi đang dần chuyển các máy từ Red Hat Enterprise Linux 5 sang RHEL 6.
Tôi cần một số tập lệnh của mình để làm một cái gì đó khác biệt một cách tinh tế trên các máy RHEL6 với những gì hiện đang được thực hiện trên các máy của RHEL5.
Giải pháp thực tế là kiểm tra trong thời gian chạy và chạy một số lệnh trên RHEL5, một số khác trên RHEL6 và một số trên cả hai.
Một ví dụ thực tế về điều này là chúng tôi đang sử dụng các mô-đun môi trường và tôi .bashrc
bao gồm một module load git
dòng, nhưng trên các máy của RHEL6, lỗi lệnh này:
RHEL6 system, git should be installed - not loading module
Tìm trong modulefile tôi tìm thấy đoạn mã sau:
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 {
...
}
Điều này dường như để làm những gì tôi muốn, nhưng tôi đã hy vọng cho một cái gì đó ngắn hơn.
Vì vậy, cách dễ nhất để nói với RHEL5 từ RHEL6 trong tập lệnh bash là gì?
Lý tưởng nhất là nó phải mạnh mẽ trên các phiên bản chính khác nhau, nhưng phải chịu được các biến thể trong số lượng phát hành nhỏ.
git
mô-đun Bash, bạn kiểm tra xem nó có tồn tại hay không trước khi gọi nó. Khi / nếu nó xuất hiện muộn hơn, kết quả kiểm tra của bạn sẽ thay đổi, đột nhiên tính năng này bắt đầu hoạt động mà không cần thêm bất kỳ nỗ lực nào.
lsb_release -r
bao gồm các văn bản khác, vd Release: 5.8
. Như Dennis Kaarsemaker giải thích , nếu bạn sử dụng lsb_release -rs
thay thế, bạn chỉ nhận được số.
lsb_release
làm việc (-r
phải cung cấp cho bạn số điện thoại; hãy thử-a
xem mọi thứ có sẵn) Nếu vậy, đó cũng là nhà cung cấp chéo.