Me gustaría escribir un script bash de instalación, donde me gustaría instalar el servidor MySQL.
En Linux Mint había seguido el código:
apt-get -y --force-yes install mysql-server-5.6
pero instalé el nuevo Debian 8 y no hay mysql-server, en su lugar lo hay mariadb.
¿Cómo puedo saber si el paquete existe?
Solo sé que hay lo dpkg -sque debería decir si un paquete está instalado.

--force-yesdesactiva toda la seguridad, por lo que realmente podría romper su sistema hasta el punto de no repararlo. También:--force-yesanula (desactiva)-y. donde esta última podría ser la opción de elección: una forma larga de-yes--assume-yes, y eso es lo que hace; Decir que sí hasta que pueda ponerse realmente feo, con el riesgo de estragos entre los elementos centrales, los fundamentos, etc.,--forceanula la seguridad (lo aprendí de la manera difícil)--simulateopción paraapt-get, por si--dry-runacaso , hacer una , por/etc/apt/sources.list, ¿no?Respuestas:
(el siguiente es de Ubuntu, pero la misma técnica obviamente también funciona en Debian)
Si el paquete existe, se mostrará la información. Si no, verás algo como:
Además, el código de salida de
apt-cacheserá distinto de cero si no se encuentran paquetes coincidentes.Nota adicional: si está utilizando
apt-cache show packagedonde el paquete es virtual (uno que no existe, pero que, por ejemplo, hace referencia a otros paquetes), obtendrá:El
exit codede esto es cero (que es un poco engañoso en mi opinión).fuente
sources.listcon este comando:apt-cache search *searchstring*. Ese comando también buscará la descripción de los paquetes y podría ayudarlo a encontrar paquetes donde no sepa el nombre exacto del paquete.apt-cache search ...devuelve cualquier tipo de coincidencias y la aplicación. devuelve 0 incluso si no se encuentra nada, lo que no es práctico en un script bash.Me gustaría utilizar
dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed".Verificará si el
mysql-serverpaquete está instalado y, de ser así, imprime este hecho en la pantalla. Una solución más sofisticada sería, en bash (no probado):Entonces uno puede hacer en un script:
fuente
En una sola línea:
apt-cache pkgnames | grep -q "\<$your_package_name\>"sale con 0 si está presente, 1 si no.
Bonificación: verificación eficiente para múltiples paquetes, enumerados en el archivo "packages_we_want", uno por línea, ordenados con
sort:apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_wantenumera todos los paquetes que desea, pero que no existen en los repositorios.apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_wantenumera todos los paquetes que desea y existen en los repositorios.fuente