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
обычно достаточно (и легче запомнить).