Tôi đã tìm thấy những điều sau đây trong câu hỏi StackOverflow bán liên quan ; câu trả lời tôi cần không thực sự trả lời câu hỏi ở đó (và không được chọn là câu trả lời đúng) vì vậy tôi đoán rằng tôi sẽ đăng nó ở đây để người khác tìm thấy dễ dàng hơn.
yum list installed PACKAGE_NAME
Lệnh này trả về một số đầu ra có thể đọc được của con người, nhưng quan trọng hơn là trả về mã trạng thái thoát; 0 cho biết gói đã được cài đặt, 1 cho biết gói chưa được cài đặt (không kiểm tra xem gói có hợp lệ hay không, do đó yum list installed herpderp-beepbopboop
sẽ trả về "1" như yum list installed traceroute
bạn muốn nếu bạn chưa cài đặt traceroute). Sau đó, bạn có thể kiểm tra "$?" cho mã thoát này.
Vì đầu ra hơi phản trực quan, tôi đã sử dụng phiên bản "cô đọng" của @Chris Downs bên dưới trong chức năng trình bao bọc để làm cho đầu ra trở nên "hợp lý" hơn (tức là 1 = đã cài đặt 0 = chưa cài đặt):
function isinstalled {
if yum list installed "$@" >/dev/null 2>&1; then
true
else
false
fi
}
sử dụng sẽ là
if isinstalled $package; then echo "installed"; else echo "not installed"; fi
BIÊN TẬP:
Các return
câu lệnh được thay thế bằng các lệnh gọi true
và false
giúp làm cho hàm dễ đọc / trực quan hơn, trong khi trả về các giá trị bash mong đợi (nghĩa là 0 cho true, 1 cho false).
Nếu bạn chỉ kiểm tra một gói trong tập lệnh của mình, bạn có thể kiểm tra yum list installed
trực tiếp tốt hơn , nhưng (IMHO) chức năng giúp dễ hiểu những gì đang diễn ra và cú pháp của nó dễ nhớ hơn nhiều so yum
với tất cả các chuyển hướng để thay thế đầu ra của nó.
$?
, chỉ cần bọc lệnh trong một điều kiện:if yum list installed "$package" >/dev/null 2>&1; then [...]