Ich verwende Debian Jessie 8.6. Mir ist aufgefallen, dass apt-get
die 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 apt
fü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 ~/.bashrc
und 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 source
Schlü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_completion
nichtverweist 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 ksh
ersetzen, 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 cd
in 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
wget
Ich hatte Probleme mit der automatischen Vervollständigung apt-get install wg[TAB][TAB]
und konnte diese lösen, indem ich den --no-generate
Parameter 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-generate
Parameter, 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 -v
zuvor 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 wg
ohne --no-generate
habe 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