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