Wenn ich wie ein Programm benutze svn
und Gnome Terminal eintippe:
svn upd
und drücke Tabes wird automatisch vervollständigt zu:
svn update
Kann ich so etwas in meinem benutzerdefinierten Bash-Skript tun?
bash
auto-completion
UAdapter
quelle
quelle
Antworten:
Sie können die programmierbare Vervollständigung verwenden . Haben Blick auf
/etc/bash_completion
und/etc/bash_completion.d/*
für einige Beispiele.quelle
/usr/share/bash-completion/completions/<program>
The provided link has that already
- Heute vielleicht, aber morgen vielleicht nicht. Oder nächstes Jahr. Oder in einem Jahrzehnt. Was auch immer Sie vorschlagen, dass die Dokumentation immer noch relevant ist, Stack Overflow rät aus diesen Gründen von Nur-Link-Antworten ab.Ich bin ein halbes Jahr zu spät, habe aber dasselbe gesucht und folgendes herausgefunden:
Sie müssen eine neue Datei erstellen:
Für eine statische Autovervollständigung (
--help
/--verbose
zum Beispiel) fügen Sie Folgendes hinzu:COMP_WORDS
ist ein Array, das alle einzelnen Wörter in der aktuellen Befehlszeile enthält.COMP_CWORD
ist ein Index des Wortes, das die aktuelle Cursorposition enthält.COMPREPLY
ist eine Array-Variable, aus der Bash die möglichen Vervollständigungen liest.Und der
compgen
Befehl gibt das Array von Elementen zurück, aus dem das aktuelle Wort stammt--help
,--verbose
und--version
stimmt mit diesem überein"${cur}"
:Quelle: http://www.debian-administration.org/articles/316
quelle
-
und" beginnen, ohne das Zielwort eingeben zu müssen, entfernen Sie einfach die Zeilenif [...] then
undfi
./etc/bash_completion.d/
. Ich bin nur hergekommen, weil ich irgendwo eine Antwort posten wollte, aber es stellte sich heraus, dass jemand die ganze Zeit drei Jahre voraus war :) Klares, präzises und vollständiges Beispiel, danke!Alle Bash-Vervollständigungen werden in gespeichert
/etc/bash_completion.d/
. Wenn Sie also Software mit bash_completion erstellen, lohnt es sich, die Datei deb / make install mit dem Namen der Software in diesem Verzeichnis abzulegen. Hier ist ein Beispiel für ein Bash-Abschlussskript für Rsync:Es lohnt sich wahrscheinlich, eine der Bash-Abschlussdateien zu lesen, die Ihrem Programm am ehesten entspricht. Eines der einfachsten Beispiele ist die
rrdtool
Datei.quelle
source ~/.local/mycrazycompletion
in Ihren~/.bashrc
pkg-c
onfig --variable = completionsdir bash-completion` angegeben wurde, und dieses Verzeichnis ist die Empfehlung der oben verlinkten Bash Completion FAQ.Hier ist ein komplettes Tutorial.
Nehmen wir ein Beispiel für ein Skript mit dem Namen admin.sh, an dem die automatische Vervollständigung ausgeführt werden soll.
Optionsauswahlliste beachten. Wenn Sie das Skript mit dieser Option aufrufen, werden alle möglichen Optionen für dieses Skript ausgedruckt.
Und hier haben Sie das Autocomplete-Skript:
Beachten Sie, dass das letzte zu vervollständigende Argument der Name des Skripts ist, zu dem Sie die automatische Vervollständigung hinzufügen möchten. Alles was Sie tun müssen, ist Ihr Autocomplete-Skript zu bashrc as hinzuzufügen
oder kopieren Sie es nach /etc/bash.completion.d
quelle
prev
Variable? Sie scheinen es nicht zu benutzen.-o nospace
Option?Wenn Sie nur eine einfache wortbasierte automatische Vervollständigung wünschen (also keine Vervollständigung von Unterbefehlen oder ähnliches), verfügt der
complete
Befehl über eine-W
Option, die genau das Richtige tut.Zum Beispiel habe ich die folgenden Zeilen in meinem,
.bashrc
um ein Programm namens jupyter automatisch zu vervollständigen :Jetzt wird es
jupyter <TAB> <TAB>
für mich automatisch vervollständigt.Die Dokumente auf gnu.org sind hilfreich.
Es scheint, dass die
IFS
Variable richtig eingestellt ist, aber das hat mir keine Probleme bereitet.Verwenden Sie die folgende
-o
Option , um die Dateinamenvervollständigung und die Standard-BASH-Vervollständigung hinzuzufügen :Um dies in zsh zu verwenden, fügen Sie den folgenden Code hinzu, bevor Sie den
complete
Befehl in Ihrem ausführen~/.zshrc
:quelle
bash jupyter <TAB><TAB>
?