Wie ich es gelöst habe

Wie ich es gelöst habe

Ich verwende Debian Jessie 8.6. Mir ist aufgefallen, dass apt-getdie erwartete Bash-Autovervollständigung erfolgt, wenn ich die Tabulatortaste für Pakete und Befehle drücke, aber wenn ich versuche, sie damit zu verwenden, funktioniert sie nicht. Ich erinnere mich, dass ich xubuntu 16.04 verwendet habe, wo sie funktioniert hat, daher finde ich es seltsam, dass sie hier nicht funktioniert. Gibt es eine Möglichkeit, sie auch aptfür den Befehl zu aktivieren ? Wenn ja, wie?apt

Antwort1

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

Wenn Sie beispielsweise von einem Ubuntu-Hintergrund zu Debian kommen, wo es vorinstalliert und standardmäßig aktiviert ist, kann dies zu einiger Verwirrung führen.

Um dies zu aktivieren/zu „beheben“, führen Sie (als Root) Folgendes aus:

apt-get install bash-completion

Dann haben Sie zwei Möglichkeiten. Sie können entweder:

 1. Aktivieren Sie es für jeden Benutzer einzeln oder

 2. Aktivieren Sie es global.

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

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

Um es zu versuchen, ohne sich ab- und wieder anzumelden, führen Sie Folgendes aus:

    . ~/.bashrc

Oder öffnen Sie eine neue Shell. Versuchen Sie dann, die Tab-Vervollständigung mit apt zu verwenden. Der Punkt und das Leerzeichen am Anfang ( .) sind dasselbe wie die Verwendung des sourceSchlüsselworts in Bash, aber portabler.

Wenn es auch bei Anmeldung mit dem Root-Konto funktionieren soll su, machen Sie dasselbe im Stammverzeichnis des Root-Benutzers (normalerweise /root).

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

Für alle, die sich fragen, warum das funktioniert: Das .vor/etc/bash_completionnichtverweist auf das aktuelle Verzeichnis, da es von Leerzeichen umgeben ist. Stattdessen wird der Inhalt der angegebenen Datei in der aktuell laufenden 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, aber dieser ist nicht von POSIX standardisiert und weniger portabel, daher rate ich den Leuten davon ab, ihn zu verwenden. In diesem Fall können Sie ihn gerne aus Gründen der Lesbarkeit kshersetzen, da es sich speziell um ein Programm zur Erweiterung von Bash handelt und nicht um etwas, das in einer Bourne-Shell oder funktionieren muss.source

Dieses Verhalten (kein Öffnen einer Unter-Shell) ähnelt übrigens der normalen Funktionsweise von DOS-/Windows-BAT-Skripten, die den Status der Shell ändern, in der sie ausgeführt werden. Wenn Sie cdin einem Shell-Skript einen anderen Pfad eingeben, befinden Sie sich daher beim Beenden des Skripts nicht mehr in diesem Pfad, wie dies bei einer BAT-Datei der Fall wäre.

Antwort2

In Debian 9 Stretch bearbeiten Sie einfach /etc/bash.bashrc und heben die Kommentierung auf:

# 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

Antwort3

Wie ich es gelöst habe

wgetIch hatte Probleme mit der automatischen Vervollständigung apt-get install wg[TAB][TAB]und konnte diese lösen, indem ich den --no-generateParameter aus den folgenden Zeilen entfernte:

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

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

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

Wie bin ich an diesen Punkt gekommen?

Ich bin an diesen Punkt gelangt, 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)

Bei der Ausführung apt-cache pkgnames wgohne --no-generatehabe ich 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.

Antwort4

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

verwandte Informationen