Forzar apt-get para preguntar sí / no

11

¿Hay alguna forma de forzar apt-geta mostrar un sí / no? Existe una --force-yesopción, pero parece que no existe --force-promptuna opción similar. Si intenta instalar un paquete que ya tiene todas las dependencias instaladas, comenzará la instalación sin mostrar un mensaje de sí / no. Esto puede ser molesto si desea revisar si existen dependencias y cuáles se instalarán porque no sabe si las dependencias potenciales están instaladas con anticipación.

NOTA: ¿ Cuándo "apt-get install" me pide que confirme si deseo continuar o no? está algo relacionado en que describe en qué condiciones estándar se muestra la solicitud. Sin embargo, estoy interesado en saber cómo forzarlo.

usuario369450
fuente
1
"Esto puede ser molesto si desea revisar si existen dependencias y cuáles se instalarán". Estoy confundido por esto. Si no se instalan dependencias, ¿qué está revisando?
Faheem Mitha
2
Interesante pregunta. Parece que no hay forma de hacer esto, salvo parchear apt-getcon una opción adecuada. Sin embargo, esta opción hipotética no me parece muy útil, francamente.
Faheem Mitha
@FaheemMitha Mi propósito para hacer esto es que es mucho más fácil descubrir qué nuevas dependencias podrían / ​​serán instaladas usando en apt-get installlugar de apt-cache showpkg.
user369450

Respuestas:

10

Simplemente no hay forma de hacer esto con la implementación actual de apt-get, necesitaría abrir una solicitud de función y apelar al responsable. El comportamiento actual de apt-get es que cuando la lista de paquetes que declaraste implícitamente instalada es igual a la cantidad de paquetes que se instalarán, y ningún otro paquete se ve afectado por actualizaciones o interrupciones, apt-get ya presume que el usuario está seguro de lo que se va a hacer , si no está seguro o desea analizar lo que se hará sin instalar realmente el paquete, puede usar la recomendación de Costas-s, --simulate, --just-print, --dry-run, --recon, --no-act .

Hay otras herramientas como apt-listbugs que analizarían las versiones de los paquetes que se instalarán antes de que realmente los instales (en este caso, para los errores) y te avisen.

Braiam
fuente
4

El comando asume yessolo en caso de instalar un paquete (que se inició desde la línea de comando) Y todas las dependencias en el sistema ya es decir, nada que instalar excepto un paquete solicitado.

En otras palabras, "si no hay nada que ver (sin paquetes adicionales), entonces no hay solicitud (nada que pedir)".

Para fines de prueba, puede usar una clave -s, --simulate, --just-print, --dry-run, --recon, --no-act

Costas
fuente
@cpburnz si all dependecies are installedya no se le solicitó, por lo que no se instalarán otros paquetes.
Costas
0

Vieja pregunta, puedo ver, pero en una situación similar ahora. Usualmente uso sudo aptitude install -P PACKAGE_NAME, lo que siempre pregunto antes de instalar. Sin embargo, ahora en Debian el administrador de paquetes predeterminado es apt|apt-gety no tiene esta funcionalidad. Por supuesto, aún puedo instalarlo aptitudey usarlo ... Sin embargo, he escrito una pequeña función / script sh / bash wrapper para apt-getpreguntar antes de la instalación. Es realmente crudo y lo escribí como una función en mi 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; }

Ahora, hagámoslo más claro:

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
}

Para usar esta función como un script sh / bash, simplemente cree un archivo de script, por ejemplo, my_apt-get.shcon contenido (Nota: el listado no contiene comentarios, para hacerlo un poco más corto ;-)):

#!/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 "$@"

Luego póngalo, por ejemplo, en ~/bin/y hágalo ejecutable con $ chmod u+x ~/bin/my_apt-get.sh. Si el directorio ~/binestá incluido en su PATHvariable, podrá ejecutarlo simplemente:

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

Tenga en cuenta:

  • El código sí usa sudo. Si usa la rootcuenta, probablemente necesite ajustarla.
  • El código no admite el autocompletado de shell
  • No tengo idea de cómo funciona el código con los patrones de shell (por ejemplo, "!", "*", "?", ...)
Michał Chabowski
fuente