dpkg-query como en su publicación vinculada parece ser la herramienta más correcta para el trabajo, excepto el uso, por ejemplo, de las bibliotecas de Python disponibles para enlazar directamente con el sistema APT en dicho contexto de secuencias de comandos.
Con dpkg-query:
dpkg-query -Wf'${db:Status-abbrev}' package-name 2>/dev/null | grep -q '^i'
Devolverá verdadero (estado de salida 0en el script de shell) si el paquete está instalado, falso (estado de salida 1) de lo contrario.
-Wsignifica "Mostrar" ( dpkg-querydebe tener una acción solicitada).
-f cambia el formato de la salida.
db:Status-abbrev es la forma abreviada del estado del paquete.
2>/dev/nullsilencia dpkg-querysi se da un nombre de paquete no válido. Cómo se debe manejar esto podría ser un problema de caso a caso.
grep -q devuelve verdadero si hay una coincidencia, falso de lo contrario.
Si se usa con frecuencia, podría hacerse una función simple:
#!/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
o simplemente
#!/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 ^.isuele ser suficiente (y más fácil de recordar).