dpkg-query é bastante simples, você pode rapidamente percorrer a página do manual e descobrir que não tem nenhuma opção para implementar isso diretamente. Então
dpkg-query -W -f '${Package} ${State}\n' | grep "^my-package .* installed"
O problema é reduzido a captura de códigos de erro em um pipeline . Manipulação de erro aparentemente restrita no shell do Unix fica estranha. Eu estava esperando ingenuamente por one-liners:).
set -e
function pkg_is_installed() {
PKG="$1"
LISTF=$(mktemp)
dpkg-query -W -f '${Package} ${State}\n' >$LISTF
grep "^${PKG} .* installed$" $LISTF >/dev/null
GREP_RC=$?
rm $LISTF
# for even moar strict error handling
test $GREP_RC == 0 -o $GREP_RC == 1
return $GREP_RC
}
Acredito que isso irá imprimir quaisquer erros que ocorram ao stderr, enquanto evita imprimir uma mensagem quando o único "erro" é que o dpkg não (ainda) viu o pacote requisitado.