Bei Verwendung der Autovervollständigung für einen beliebigen Befehl, der die integrierte _longopt
Vervollständigungsfunktion verwendet (z. B. mkdir
), schlägt die Shell zusätzlich zu den gewünschten Vorschlägen immer auch den Inhalt des aktuellen Verzeichnisses vor.
Wenn ich beispielsweise tippe
mkdir ~/somedir
und drücken Sie zweimal die Tabulatortaste. Bash schlägt vor: (vorausgesetzt, der Typ des aktuellen Verzeichnisses enthält applications
, desktop
, usw.)
applications/ desktop/ documents/
...
somedir_a/ somedir_b/
Wie kann das normale Verhalten wiederhergestellt werden, sodass Bash nur Vorschläge macht somedir_a
und somedir_b
keine anderen Dateien/Verzeichnisse?
Bash-Version: GNU bash, version 5.0.11(1)-release (x86_64-redhat-linux-gnu)
Bash-Vervollständigung:2.8
Antwort1
Dieses Verhalten kann durch die Shell-Option verursacht werden nullglob
, die beispielsweise in Ihrem aktiviert sein kann .bashrc
.
Der Grund hierfür ist, dass die _longopt
Funktion einen Fehler in ihrer Definition aufweist, der dieses Verhalten verursacht, wenn sie _longopt
eingeschaltet ist.
Die Lösung besteht darin, diese Option zu deaktivieren oder die Funktion selbst zu überschreiben _longopt
.
Ein ähnlicher Effekt wird auch hier beschrieben:Warum wirkt sich Nullglob auf die Tab-Vervollständigung aus?, obwohl diese Frage ziemlich schwer zu finden ist, wenn Sie nicht wissen, dass der Fehler bei dieser Option liegt.
EDIT: Wie bereits erwähnt von@fra-san, das ist einbekanntes Problemmit bash-completion
. Der Fix ist in der Version gelandet 2.9
, diese Version wird jedoch noch nicht auf Fedora (und möglicherweise auch auf anderen Systemen) ausgeliefert.