dpkg-query так как в вашей связанной публикации, кажется, самый правильный инструмент для работы, за исключением использования, например, доступных библиотек Python для непосредственного связывания с системой APT в таком контексте сценариев.
С dpkg-query:
dpkg-query -Wf'${db:Status-abbrev}' package-name 2>/dev/null | grep -q '^i'
Возвращает значение true (состояние выхода 0в сценарии оболочки), если пакет установлен, в 1противном случае - значение false (состояние выхода ).
-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обычно достаточно (и легче запомнить).