Complete
Mit diesem Kommando kann das ganze Verhalten der Bash bei der Vervollständigung von Argumenten verändert werden.
Bevor wir uns mit den Optionen auseinander setzen, soll ein Beispiel die Mächtigkeit des Konzepts andeuten.
Beispiel
Als Argumente für das Programm xv (dient der Anzeige von Dateien diverser Grafikformate) sollen bei der automatischen Dateinamensergänzung nur Dateien mit einer typischen Dateiendung (*.jpg, *.gif,...) berücksichtigt werden. Mit complete müsste die Bash wie folgt eingerichtet werden:
# Die Option "extglob" (vergleiche shopt) muss gesetzt sein: shopt -q extglob || shopt -s extglob # Test des bisherigen Verhaltens: xv s[Tab][Tab] sax_0.gif sax_norm.tmp sax_xxx.jpg sax_grob.tmp sax_post.tmp start_taper complete -f -X '!*.+(gif|jpg|jpeg|GIF|JPG|bmp)' xv # Test des jetzigen Verhaltens: xv s[Tab][Tab] sax_0.gif sax_xxx.jpg
Mit der Option -p lässt sich jede Spezifikation anzeigen und mit -r auch wieder löschen. Wird kein Name angegeben, betrifft die Aktion jede Spezifikation:
complete -p complete -f -X '!*.+(gif|jpg|jpeg|GIF|JPG|bmp)' xv complete -r xv
complete wurde im Beispiel durch die Option -f angewiesen, den folgenden Ausdruck einer Dateinamenserweiterung zu unterziehen. Alternative Expansionen sind (Auswahl):
-a | Es wird eine Expansion zu einem bekannten Aliasnamen versucht | |
-b | Erweiterung zu einem eingebauten Kommando | |
-c | Erweiterung zu einem Kommando | |
-e | Exportierte Variable
Als Beispiel definieren wir eine Funktion, die den Inhalt einer exportierten Variablen anzeigen soll: show_exports() { echo $*; } Beim Aufruf dieser Funktion sollen bei versuchter Expansion alle möglichen Erweiterungen angezeigt werden. Um sich den Inhalt der Variablen selbst anzuschauen, muss dieser ein Dollarzeichen voranstehen. Mit der Option -P lässt sich ein solches Präfix für ein Expansionsergebnis festlegen. Die complete-Zeile sollte wie folgt aussehen: complete -e -P '$' # Test show_exports PO[Tab] show_exports $POVRAYOPT -l/usr/lib/povray/include | |
-f | Dateinamenserweiterung | |
-u | Benutzernamen
Als Beispiel soll das Kommando mail mit einem Benutzernamen expandiert werden. Als Suffix wird automatisch "@outside.all" ergänzt: complete -u -S '@outside.all' mail # Test mail a[Tab] mail alf@outside.all | |
-v | Variablennamen
Als weitere Optionen stehen zur Verfügung: | |
-G Muster | Es wird eine Dateinamenserweiterung mit dem Muster versucht | |
-C Kommando | Das Kommando wird in einer Subshell gestartet und dessen Ausgabe als mögliche Vervollständigung eingesetzt | |
-X Muster | Es wird eine Dateinamenserweiterung nach Ausführung aller anderen Optionen versucht. Alle Dateinamen, die mit dem Muster übereinstimmen, werden aus der Liste der möglichen Vervollständigungen entfernt | |
-P Präfix | Nach Ausführung aller anderen Optionen werden die möglichen Erweiterungen mit dem angegebenen Präfix versehen | |
-S Suffix | Nach Ausführung aller anderen Optionen werden die möglichen Erweiterungen mit dem angegebenen Suffix versehen |