source sucht PATH standardmäßig.
Aber in Bash funktioniert die automatische Vervollständigung nicht, wenn ein Befehlsname nach source eingegeben wird .
Wann funktioniert die automatische Vervollständigung im Allgemeinen auf der Grundlage von PATH funktioniert und wann nicht?
Wie kann ich es zum Laufen bringen, wenn ich das Argument in source tippe ?
Danke.
Akzeptierte Antwort:
source (die bash eingebauter Befehl) nimmt einen Dateinamen an Streit; die PATH-Suche wird nur ausgelöst, wenn der angegebene Dateiname nicht gefunden wird. Also source foo versucht zuerst, ./foo zu öffnen und nur wenn das fehlschlägt, sucht es nach /path/dir/foo . Probieren Sie die Tab-Vervollständigung mit Dateinamen aus, die in Ihrem aktuellen Verzeichnis vorhanden sind, oder geben Sie Pfade zu dem Befehl an, an dem Sie interessiert sind. Diese sollten wie erwartet mit der Tab-Vervollständigung versehen werden.
-
Der einfachste Weg, das zu erreichen, was Sie wollen, besteht darin, zu erkennen, dass die Tab-Vervollständigung versucht, complete-filename zu verwenden aber Sie möchten Komplettbefehl . Sie können complete-command auslösen mit dem
M-!keybind alias Alt+! . (SieheREADLINEAbschnitt,CompletingUnterabschnitt inman bashund in der Bash-Online-Dokumentation für andere Vervollständigungsfunktionen und Standard-Tastenkombinationen.) -
Der harte Weg wäre, die standardmäßigen Vervollständigungsfunktionen zu überarbeiten, die für
sourceausgelöst werden ’s erstes Argument, um sowohl den complete-filename aufzurufen und complete-command Funktionen. Siehehelp complete(auf Ihrer Kommandozeile), dieProgrammable CompletionUnterabschnitt inman bashund in der Bash-Online-Dokumentation undcompleteeingebauter Befehl.
Im Allgemeinen ist die Tab-Vervollständigung positionsabhängig und ruft verschiedene Vervollständigungsfunktionen auf, je nachdem, wo Sie sich in der Befehlszeile befinden. Auf Arch-Systemen können Pakete eine Vervollständigungsdatei in /usr/share/bash-completion installieren um kontextbewusste Vervollständigungen für ihre ausführbaren Dateien bereitzustellen.