Forcer apt-get à demander oui / non

11

Existe-t-il un moyen de forcer l' apt-getaffichage de l'invite oui / non? Une --force-yesoption existe, mais il ne semble pas y avoir d' --force-promptoption similaire. Si vous essayez d'installer un package dont toutes les dépendances sont déjà installées, il commencera l'installation sans afficher d'invite oui / non. Cela peut être gênant si vous souhaitez vérifier si des dépendances existent et lesquelles seront installées car vous ne savez pas si les dépendances potentielles sont installées à l'avance.

REMARQUE: Quand «apt-get install» me demande-t-il de confirmer si je souhaite continuer ou non? est quelque peu lié car il décrit dans quelles conditions standard l'invite est affichée. Je suis curieux de savoir comment le forcer.

user369450
la source
1
"Cela peut être gênant si vous voulez vérifier si des dépendances existent et lesquelles seront installées." Je suis confus par cela. Si aucune dépendance n'est installée, que révisez-vous?
Faheem Mitha
2
Question interessante. Il semble qu'il n'y ait aucun moyen de le faire, à moins de patcher apt-getavec une option appropriée. Cependant, cette option hypothétique ne me semble pas très utile, franchement.
Faheem Mitha
@FaheemMitha Mon but pour ce faire est qu'il est beaucoup plus facile de découvrir quelles nouvelles dépendances pourraient / seront installées en utilisant apt-get installplutôt que apt-cache showpkg.
user369450

Réponses:

10

Il n'y a tout simplement aucun moyen de le faire avec l'implémentation actuelle d'apt-get, vous devez ouvrir une demande de fonctionnalité et faire appel au responsable. Le comportement actuel d'apt-get est que lorsque la liste des packages que vous déclarez implicitement installés est égale au nombre de packages qui seront installés, et qu'aucun autre package n'est affecté par des mises à niveau ou des interruptions, apt-get suppose que l'utilisateur est déjà est sûr de ce qui va être fait , si vous n'êtes pas sûr ou si vous voulez analyser ce qui sera fait sans installer réellement le paquet, vous pouvez utiliser la recommandation Costas de -s, --simulate, --just-print, --dry-run, --recon, --no-act.

Il existe d'autres outils comme apt-listbugs qui analyseraient les versions des packages à installer avant de les installer (dans ce cas pour les bogues) et vous avertiraient.

Braiam
la source
4

La commande suppose yesjuste en cas d'installation d' un package (qui a démarré à partir de la ligne de commande) ET toutes les dépendances dans le système déjà c'est-à-dire rien à installer sauf un package demandé.

En d'autres termes "si rien à voir (pas de paquets supplémentaires) alors pas d'invite (rien à demander)".

À des fins de test, vous pouvez utiliser une clé -s, --simulate, --just-print, --dry-run, --recon, --no-act

Costas
la source
@cpburnz si all dependecies are installeddéjà vous ne serez pas invité, donc aucun autre paquet ne sera installé.
Costas
0

Vieille question, je peux voir, mais dans une situation similaire maintenant. Habituellement, j'utilise ce que je sudo aptitude install -P PACKAGE_NAMEdemande toujours avant l'installation. Cependant, le gestionnaire de paquets par défaut de Debian est maintenant apt|apt-getet il n'a pas cette fonctionnalité. Bien sûr, je peux toujours l'installer aptitudeet l'utiliser ... Cependant, j'ai écrit une petite fonction / script sh / bash wrapper pour apt-getdemander avant l'installation. C'est vraiment brut et je l'ai écrit en fonction dans mon terminal.

$ f () { sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf'; read -p 'Do You want to continue (y/N): ' ans; case $ans in [yY] | [yY][eE][sS]) sudo apt-get -y install "$@";; *);; esac; }

Maintenant, soyons plus clairs:

f () {
  # Do filtered simulation - without lines contains 'Inst' and 'Conf'
  sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf';

  # Interact with user - If You want to proceed and install package(s),
  # simply put 'y' or any other combination of 'yes' answer and tap ENTER.
  # Otherwise the answer will be always not to proceed.
  read -p 'Do You want to continue (y/N): ' ans;
  case $ans in
    [yY] | [yY][eE][sS])
      # Because we said 'yes' I put -y to proceed with installation
      # without additional question 'yes/no' from apt-get 
      sudo apt-get -y install "$@";
    ;;
    *)
      # For any other answer, we just do nothing. That means we do not install
      # listed packages.
    ;;
  esac
}

Pour utiliser cette fonction comme un script sh / bash, il suffit de créer un fichier script par exemple my_apt-get.shavec du contenu (Remarque: la liste ne contient pas de commentaires, pour la raccourcir un peu ;-)):

#!/bin/sh

f () {
  sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf';
  read -p 'Do You want to continue (y/N): ' ans;
  case $ans in
    [yY] | [yY][eE][sS])
      sudo apt-get -y install "$@";
    ;;
    *)

    ;;
  esac
}

f "$@"

Ensuite, mettez-le par exemple dans ~/bin/et rendez-le exécutable avec $ chmod u+x ~/bin/my_apt-get.sh. Si le répertoire ~/binest inclus dans votre PATHvariable, vous pourrez l'exécuter simplement en:

$ my_apt-get.sh PACKAGE_NAME(S)_TO INSTALL

Notez s'il vous plaît:

  • Le code utilise sudo. Si vous utilisez un rootcompte, vous devrez probablement l'ajuster.
  • Le code ne prend pas en charge la saisie semi-automatique du shell
  • Je n'ai aucune idée de la façon dont le code fonctionne avec les modèles de shell (par exemple "!", "*", "?", ...)
Michał Chabowski
la source