Wie implementiert man einen Paketinstallationsvorschlag auf Debian?

21

Mir ist aufgefallen, dass ich unter Ubuntu Folgendes eingebe:

mc

und es ist nicht installiert, ich erhalte die folgende Meldung:

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

In Debian ist dies jedoch nicht verfügbar. Es wird nur die Meldung "-bash: / usr / bin / mc: Keine solche Datei oder kein solches Verzeichnis" ausgegeben. Wie kann ich die gleiche Funktionalität in der Bash-Befehlszeile unter Debian implementieren? Ja, ich weiß, dass ich, wenn es sich um einen Paketvorschlag handelt, einfach eine Regex-Suche mit apt-cache search durchführen kann . Ich hatte jedoch auf den einfacheren Vorschlag gehofft, sofort den Namen des Programms einzugeben.

Die Funktionalität wird laut Diskussion durch das Paket command-not-found bereitgestellt . Dies ist jedoch auch nach der Installation und der Installation des Bash-Completion-Pakets auf der Debian-Bash-Shell nicht verfügbar.

Joel G Mathew
quelle

Antworten:

22

Der Grund, warum die Installation command-not-foundkeine Vorschläge für nicht installierte Pakete lieferte, war, dass ich eine kleine Benachrichtigung von dpkg als Teil der Installation verpasst hatte.

Man soll den Befehl update-command-not-foundsofort nach dem Ausführen ausführen apt-get install command-not-found. Tatsächlich fordert dpkg zur Ausführung dieses Befehls auf.

Joel G Mathew
quelle
1
Ich musste auch vorher laufen apt-get update, um update-command-not-founddann entweder eine neue Bash-Session zu eröffnen oder source /etc/bash.bash.rc.
Jordanbtucker
Ich habe apt updatevor apt install command-not-founddem eine gemacht update-command-not-foundund dann eine neue Shell gestartet, aber ich habe festgestellt, dass ich eine andere brauche apt updateund vielleicht update-command-not-foundbevor es funktioniert.
Dave X
9

Das Debian-Paket scheint unvollständig zu sein. Die README sagt, dass Sie /etc/bash_command_not_foundin Ihrem Quellcode .bashrc. Seltsamerweise ist diese Datei nicht im Paket enthalten.

Das Debian- command-not-foundPaket basiert auf dem Ubuntu-Paket . Das Ubuntu-Paket scheint in dieser Hinsicht vollständiger zu sein.

Inhalt der Ubuntu-Version von 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        
}

Fügen Sie diese Zeilen zu Ihrem ~/.bashrc(oder /etc/bash.bashrc) hinzu, und die command-not-foundFunktion sollte funktionieren.

Lesmana
quelle
1
Die README-Datei ist falsch, Debian verwendet diese Datei nicht. Der Handler ist in /etc/bash.bashrc enthalten (zumindest in Debian 9), das von interaktiven Bash-Shells beim Start automatisch ausgeführt wird.
Hackerb9
Die Installation des command-not-foundPakets (Version 0.2.38-4 von debian.org) auf MX Linux (Debian 9 Stretch base) änderte /etc/bash.bashrc nicht und funktionierte anschließend nicht, bis die Zeilen in dieser Antwort hinzugefügt wurden.
Xen2050