it-swarm.com.de

Debian - apt (nicht apt-get) Autocompletion funktioniert nicht

Ich bin auf Debian Jessie 8.6. Ich habe bemerkt, dass apt-get erhält die erwartete Bash-Autovervollständigung, wenn Sie die Tabulatortaste für Pakete und Befehle drücken, aber wenn Sie versuchen, sie mit apt zu verwenden, funktioniert dies nicht. Ich erinnere mich, dass ich xubuntu 16.04 dort verwendet habe, wo es funktioniert hat, daher finde ich es seltsam, dass es hier nicht funktioniert. Gibt es eine Möglichkeit, es auch für den Befehl apt zu aktivieren? Wenn das so ist, wie?

20
Andrea

Debian wird nicht mit 'Bash-Vervollständigung' installiert und aktiviert.

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

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 ab- und wieder anzumelden:

    . ~/.bashrc
    

    Oder öffnen Sie eine neue Shell. Versuchen Sie dann, die Tab-Vervollständigung mit apt zu verwenden. Dieser Punkt und das Leerzeichen am Anfang (.) Entsprechen der Verwendung des Schlüsselworts source in bash, sind jedoch portabler.

    Wenn Sie möchten, dass es funktioniert, wenn su in das Root-Konto eingegeben wird, machen Sie dasselbe im Home-Verzeichnis von root (normalerweise /root).

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

Für alle, die sich fragen, warum dies funktioniert, bezieht sich das . Vor /etc/bash_completion nicht auf das aktuelle Verzeichnis. da es Leerzeichen um sich 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 dieses . Durch den Befehl source ersetzt werden, aber dies ist nicht durch POSIX standardisiert und weniger portabel, so dass ich dazu neige, Leute davon abzuhalten, es zu verwenden. In diesem Fall können Sie die Lesbarkeit durch ksh ersetzen, da es sich speziell um ein Programm zum Erweitern von Bash handelt und nicht um etwas, das in einer Bourne-Shell oder source funktionieren muss.

19
Wyatt8740

In Debian 9 Stretch bearbeiten Sie einfach /etc/bash.bashrc und kommentieren Sie:

# 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
6
4pie0

Kopieren Sie diese Konfigurationsdatei von Ubuntu:/usr/share/bash-vervollständigung/vervollständigungen/apt in dasselbe Verzeichnis in Jessie. Sie können die Datei auch hier herunterladen: http://Pastebin.com/PRBMt3an

3
minaev

Wie ich es gelöst habe

Ich hatte Probleme mit der automatischen Vervollständigung beim Versuch, wget mit apt-get install wg[TAB][TAB] Automatisch zu vervollständigen, und ich konnte es lösen, indem ich den Parameter --no-generate Von den folgenden Fliegen 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 von bash-completion Verfügbar sind.

Der Parameter --no-generate, Auf den ich mich beziehe, ist in der folgenden Zeile zu sehen, aber ich habe ALLE --no-generate Entfernt, nicht nur aus dieser Zeile: https://github.com/ scop/bash-vervollständigung/blob/master/vervollständigungen/apt-get # L28

Wie bin ich zu diesem Punkt gekommen?

Ich kam zu diesem Punkt, nachdem ich set -v Vor apt-get install wg[TAB][TAB] Ausgeführt hatte, 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)

Als ich apt-cache pkgnames wg Ohne --no-generate Ausführte, bekam ich die Liste für die automatische Vervollständigung korrekt:

[email protected]:/# apt-cache pkgnames wg
wgalician-minimos
wget2
wgaelic
wget
wgerman-medical
wget2-dev

Hoffe das hilft.

1
Ruben Alves

Das Problem wird höchstwahrscheinlich durch verursacht

Dir::Cache::pkgcache "";
Dir::Cache::srcpkgcache "";

einstellungen in /etc/apt/apt.conf.d. In meinem Fall stammt es aus dem Debian Docker-Image, siehe https://github.com/debuerreotype/debuerreotype/blob/799473bee3d388cf00bd55221b38a9d58bd6a2ba/scripts/debuerreotype-minimizing-config

0
petr-tichy