dpkg-query
як у вашому зв’язаному дописі, здається, є найбільш правильним інструментом для роботи, за винятком використання, наприклад, наявних бібліотек Python для прив’язки безпосередньо до системи APT у такому сценарії сценаріїв.
З dpkg-query
:
dpkg-query -Wf'${db:Status-abbrev}' package-name 2>/dev/null | grep -q '^i'
Повернеться true (статус виходу 0
у скрипті оболонки), якщо пакет встановлений, false (статус виходу 1
) в іншому випадку.
-W
означає "Показати" ( dpkg-query
має бути запитувана дія).
-f
змінює формат виводу.
db:Status-abbrev
- це коротка форма статусу пакета.
2>/dev/null
мовчить, dpkg-query
якщо вказано недійсну назву пакета. Як це можна вирішити, може бути конкретним питанням.
grep -q
повертає true, якщо є збіг, false - інше.
Якщо він використовується часто, його можна зробити простою функцією:
#!/bin/sh
debInst() {
dpkg-query -Wf'${db:Status-abbrev}' "$1" 2>/dev/null | grep -q '^i'
}
if debInst "$1"; then
printf 'Why yes, the package %s _is_ installed!\n' "$1"
else
printf 'I regret to inform you that the package %s is not currently installed.\n' "$1"
fi
або просто просто
#!/bin/sh
if dpkg-query -Wf'${db:Status-abbrev}' "$1" 2>/dev/null | grep -q '^i'; then
printf 'Why yes, the package "%s" _is_ installed!\n' "$1"
else
printf 'I regret to inform you that the package "%s" is not currently installed.\n' "$1"
fi
dpkg-query -l "$package" | grep -q ^.i
зазвичай достатньо (і простіше запам'ятати).