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 0
en el script de shell) si el paquete está instalado, falso (estado de salida 1
) de lo contrario.
-W
significa "Mostrar" ( dpkg-query
debe 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/null
silencia dpkg-query
si 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 ^.i
suele ser suficiente (y más fácil de recordar).