Je voudrais écrire un script bash d'installation, où j'aimerais installer le serveur MySQL.
Sur Linux Mint, j'avais suivi le code:
apt-get -y --force-yes install mysql-server-5.6
mais j'ai installé la nouvelle Debian 8 et il n'y en a pas mysql-server
- au lieu de cela mariadb
.
Comment puis-je savoir si le package existe?
Je sais juste qu'il y en a dpkg -s
qui devrait dire si un paquet est installé.
--force-yes
désactive toute la sécurité, de sorte que vous pourriez vraiment casser votre système au point de ne plus pouvoir le réparer. Aussi:--force-yes
remplace (désactive)-y
. où ce dernier pourrait être l'option de choix: une longue forme de-y
is--assume-yes
, et c'est ce qu'il fait; Dire oui jusqu'à ce que cela devienne vraiment moche, avec des risques de ravage parmi les éléments de base, les fondamentaux, etc.,--force
annule la sécurité (l'a appris à la dure)--simulate
option pourapt-get
, faire un--dry-run
, juste au cas où/etc/apt/sources.list
, non?Réponses:
(ce qui suit est d'Ubuntu, mais la même technique fonctionne évidemment aussi sur Debian)
Si le package existe, des informations seront affichées. Sinon, vous verrez quelque chose comme:
De plus, le code de sortie de
apt-cache
sera différent de zéro si aucun package correspondant n'est trouvé.Remarque supplémentaire: si vous utilisez un
apt-cache show package
package virtuel (celui qui n'existe pas, mais qui est, par exemple, référencé par d'autres packages), vous obtiendrez:Le
exit code
de ceci est zéro (ce qui est un peu trompeur à mon avis.)la source
sources.list
avec cette commande:apt-cache search *searchstring*
. Cette commande recherchera également la description des packages et pourrait vous aider à trouver des packages dont vous ne connaissez pas le nom exact.apt-cache search ...
retourne tout type de correspondance et l'application. renvoie 0 même si rien n'est trouvé, ce qui n'est pas pratique dans un script bash.J'utiliserais
dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed"
.Il vérifiera si le
mysql-server
package est installé et si oui, il imprime ce fait à l'écran. Une solution plus sophistiquée serait, en bash (non testé):On peut donc faire dans un script:
la source
Dans une doublure:
apt-cache pkgnames | grep -q "\<$your_package_name\>"
sort avec 0 s'il est présent, 1 sinon.
Bonus: vérification efficace de plusieurs packages, répertoriés dans le fichier "packages_we_want", un par ligne, triés avec
sort
:apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_want
répertorie tous les packages que vous souhaitez, mais qui n'existent pas dans les référentiels.apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_want
répertorie tous les packages que vous souhaitez et qui existent dans les référentiels.la source