Complete

Aus Foxwiki

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