¿Cómo implementar la sugerencia de instalación de paquete en Debian?

21

He notado que mientras estoy en Ubuntu, si escribo lo siguiente:

mc

y no está instalado, recibo el siguiente mensaje:

The program 'mc' is currently not installed. You can install it by typing: sudo apt-get install mc

Sin embargo, en Debian, eso no está disponible. Simplemente da un mensaje "-bash: / usr / bin / mc: No existe dicho archivo o directorio". ¿Cómo puedo implementar la misma funcionalidad en la línea de comando bash en Debian? Sí, sé que si lo que quiero es una sugerencia de paquete, simplemente puedo hacer una búsqueda de expresiones regulares usando la búsqueda de apt-cache . Sin embargo, esperaba la sugerencia más simple de inmediato al escribir el nombre del programa.

Según las discusiones, la funcionalidad es proporcionada por el paquete command-not-found . Sin embargo, incluso después de instalarlo, y también de instalar el paquete bash-complete, esto no está disponible en el shell bash de Debian.

Joel G Mathew
fuente

Respuestas:

22

La razón por la que la instalación command-not-foundno comenzó a proporcionar sugerencias para paquetes no instalados fue porque me había perdido una pequeña notificación de dpkg como parte de la instalación.

Se supone que uno debe ejecutar el comando update-command-not-foundinmediatamente después de ejecutarlo apt-get install command-not-found. De hecho, dpkg solicita ejecutar este comando.

Joel G Mathew
fuente
1
También tuve que ejecutar apt-get updateantes de ejecutar y update-command-not-foundluego abrir una nueva sesión de bash o source /etc/bash.bash.rc.
jordanbtucker
Hice una apt updateantes de apt install command-not-foundentonces el update-command-not-found, y luego comenzó un nuevo shell, pero encontré que necesitaba otra apt updatey tal vez update-command-not-foundantes de que empezara a trabajar.
Dave X
9

El paquete debian parece estar incompleto. El archivo README dice que debes buscar /etc/bash_command_not_founden tu .bashrc. Curiosamente, ese archivo no está incluido en el paquete.

El command-not-foundpaquete debian se basa en el paquete ubuntu . El paquete ubuntu parece ser más completo en ese sentido.

Contenido de la versión ubuntu de bash_command_not_found :

command_not_found_handle() {
  if  [ -x /usr/lib/command-not-found ]; then
     /usr/lib/command-not-found -- "$1" 
     return $?
  else
     return 127
  fi        
}

Agregue esas líneas a su ~/.bashrc(o /etc/bash.bashrc) y la command-not-foundfunción debería funcionar.

lesmana
fuente
1
El archivo README es incorrecto, Debian no usa ese archivo. El controlador se incluye en /etc/bash.bashrc (al menos en Debian 9), que se ejecuta automáticamente por los shells interactivos de Bash cuando se inician.
hackerb9
La instalación del command-not-foundpaquete (versión 0.2.38-4 de debian.org) en MX Linux (base Debian 9 Stretch) no modificó /etc/bash.bashrc y posteriormente no funcionó hasta agregar las líneas en esta respuesta.
Xen2050