Debian - apt (not apt-get) Autovervollständigung funktioniert nicht

18

Ich bin auf Debian Jessie 8.6. Mir ist aufgefallen, dass apt-getdie erwartete Bash-Autovervollständigung beim Drücken der Tabulatortaste für Pakete und Befehle auftritt, aber wenn ich versuche, sie damit zu verwenden apt, funktioniert sie nicht. Ich erinnere mich, dass ich xubuntu 16.04 dort verwendet habe, wo es funktioniert hat. Deshalb finde ich es seltsam, dass es hier nicht funktioniert. Gibt es eine Möglichkeit, es auch für den Befehl zu aktivieren apt? Wenn das so ist, wie?

Andrea
quelle
Hat irgendetwas für dich funktioniert?
Lynob
@ Lynob Am Ende bin ich zu Ubuntu gewechselt, also kann ich dir nicht helfen, sorry.
Andrea

Antworten:

18

Debian wird nicht mit installierter und aktivierter Bash-Vervollständigung ausgeliefert.

Um dies zu beheben, führen Sie (als root):

apt-get install bash-completion

Dann haben Sie zwei Möglichkeiten. Sie können es entweder (1) für jeden Benutzer einzeln oder (2) global aktivieren.

  1. Wenn Sie es nur für Ihren Benutzer aktivieren möchten, bearbeiten Sie ~/.bashrc- fügen Sie Folgendes hinzu:

    if [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
    fi
    

    Führen Sie Folgendes aus, um es zu versuchen, ohne sich abzumelden und wieder anzumelden:

    . ~/.bashrc
    

    Oder öffne eine neue Shell. Versuchen Sie dann, die Tabulatorvervollständigung mit apt zu verwenden. Dieser Punkt und das Leerzeichen am Anfang ( .) entsprechen der Verwendung des sourceSchlüsselworts in bash, sind jedoch portabler.

    Wenn Sie möchten, dass es funktioniert, wenn Sie susich im Root-Konto befinden, führen Sie dasselbe (normalerweise /root) im Stammverzeichnis des Root aus .

  2. Um es global zu aktivieren, nehmen Sie /etc/bash.bashrcstattdessen die Änderungen von (1) in der Datei vor.

Für jeden, der fragen ist , warum das funktioniert, die .vor /etc/bash_completionsich nicht in das aktuelle Verzeichnis beziehen, da es Räume um sie hat. Stattdessen wird der Inhalt der angegebenen Datei in der aktuell ausgeführten Shell ausgewertet, anstatt in einer neuen Subshell ausgeführt zu werden. Es ist hier standardisiert.

In Bash .kann dies durch den Befehl ersetzt werden source, dies ist jedoch nicht durch POSIX standardisiert und ist weniger portabel, so dass ich dazu neige, Leute davon abzuhalten, es zu verwenden. In diesem Fall kshkönnen Sie die sourceLesbarkeit durch ein anderes Programm ersetzen , da es sich speziell um ein Programm zum Erweitern von Bash handelt, und nicht um ein Programm, das in einer Bourneshell ausgeführt werden muss .

Wyatt8740
quelle
1
Ich habe diese Schritte bereits ausgeführt, aber das hat nicht geholfen. Funktioniert nur mit apt-get, nicht aber mit apt.
Andrea
@Andrea Oh, sorry, ich habe deine Frage nicht vollständig gelesen, denke ich. Ich bin im Moment nicht in meiner Debian-Box (unter Windows habe ich leider nur Cygwin), aber ich werde versuchen, es von meinem Debian-Rechner aus herauszufinden, wenn ich wieder zu Hause bin.
Wyatt8740
4

In Debian 9 Stretch bearbeiten Sie einfach /etc/bash.bashrc und entfernen Sie das Kommentarzeichen:

# enable bash completion in interactive shells
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
4pie0
quelle
3

Kopieren Sie diese Konfigurationsdatei von Ubuntu: / usr / share / bash-completion / completions / apt in dasselbe Verzeichnis in Jessie. Sie können die Datei auch hier herunterladen : http://pastebin.com/PRBMt3an

minaev
quelle
Das ist das, was ich benötige. Die automatische Vervollständigung funktioniert jedoch nicht für apt. Nach dem Kopieren wurde die heruntergeladene apt-Datei in / usr / share / bash-completion / completions / umbenannt. Wie funktioniert es?
Freitag,
Die pastebin.com/PRBMt3an-Datei befand sich im Windows CR LF-Zeilenvorschub. Aus diesem Grund funktionierte sie nicht. Ich musste das Zeilenformat in Unix LF Linefeed konvertieren, damit es nach dem Start eines neuen Terminals funktionierte.
Klor
Hier ist die 'apt'-Datei mit dem korrekten Zeilenvorschub: filedropper.com/apt_1
klor
1

Wie ich es gelöst habe

Ich hatte Probleme mit der automatischen Vervollständigung beim Versuch, sie automatisch wgetzu vervollständigen, apt-get install wg[TAB][TAB]und konnte sie lösen, indem ich den --no-generateParameter aus den nachstehenden Zeilen entfernte:

/usr/share/bash-completion/completions/apt-cache
/usr/share/bash-completion/completions/apt-get

Erwähnenswert ist, dass diese Dateien erst nach der Installation verfügbar sind bash-completion.

Der --no-generateParameter, auf den ich mich beziehe, ist in der folgenden Zeile zu sehen, aber ich habe ALLE entfernt --no-generate, nicht nur aus dieser Zeile: https://github.com/scop/bash-completion/blob/master/completions/apt-get# L28

Wie bin ich zu diesem Punkt gekommen?

Ich kam zu diesem Punkt, nachdem ich set -vzuvor ausgeführt hatte apt-get install wg[TAB][TAB], was zeigte, dass der ausgeführte Befehl war:

apt-cache --no-generate pkgnames wg

und die Ausgabe war ein Fehler:

E: Could not open file  - open (2: No such file or directory)

Wenn ich apt-cache pkgnames wgohne ausgeführt habe, habe --no-generateich die Liste für die automatische Vervollständigung korrekt erhalten:

root@484f5c8f56ba:/# apt-cache pkgnames wg
wgalician-minimos
wget2
wgaelic
wget
wgerman-medical
wget2-dev

Hoffe das hilft.

Ruben Alves
quelle
Das war genau das, was ich brauchte. Danke: D
Ceisc