Login
Newsletter
Werbung

So, 25. Mai 2003, 00:00

Programmierbare Eingabe-Vervollständigung in Bash

Die grundsätzliche Syntax von complete ist einfach:

complete [ Optionen ] name [ name ... ]

Nach dem Kommando complete können also Optionen folgen, dann ein name, womit der Name eines Kommandos gemeint ist. Außerdem können weitere Namen folgen für Kommandos, die genauso wie das erste behandelt werden sollen.

Die wichtigsten Optionen sind:

-o comp_option Legt verschiedene Optionen für die Generierung von passenden Elementen fest. Die Einzelheiten sind in der Manpage zu finden.
-A action Erlaubt die Auswahl von vordefinierten Methoden, um passende Elemente zu finden. Man muß diese Option nicht verwenden, man kann z.B. auch -F oder -G einsetzen. Die Einzelheiten sind in der Manpage zu finden.
-G pattern Die Auswahl besteht aus den Dateinamen, die auf das Pattern passen.
-W wordlist Die Auswahl besteht aus den direkt angegebenen Wörtern. Beispielsweise sorgt -W "rot gelb" dafür, daß für eine Komplettierung genau die beiden Wörter gelb und rot zur Verfügung stehen.
-C command Das Kommando command wird in einer Subshell ausgeführt, und seine Ausgabe wird für die Komplettierungen verwendet.
-F function Die Shell-Funktion function wird ausgeführt (im gleichen Kontext wie die aktuelle Shell). Sie muß die möglichen Komplettierungen in die Array-Variable COMPREPLY schreiben, die dann ausgewertet wird. Das Interessante ist hier, welche Funktionen bash-completion bereits mitbringt. Leider ist mir keine ausführliche Dokumentation bekannt. Sie müssen in die Datei /etc/bash_completion hineinsehen. Die Funktionen beginnen mit _filedir und gehen bis zum Ende der Datei - mehr als 4000 Zeilen, die Ihnen zur Verfügung stehen.
-X pattern Aus der Auswahl werden die Elemente entfernt, die auf das Pattern passen. Dies ist also ein Filter.
-P prefix Prefix wird vor den Anfang jeder möglichen Komplettierung geschrieben, nachdem alle anderen Optionen verarbeitet sind.
-S suffix Suffix wird hinter jede mögliche Komplettierung geschrieben, nachdem alle anderen Optionen verarbeitet sind.

Schreiben eigener Komplettierungen

Mit diesem Wissen sollte es Ihnen leicht fallen, eigene Komplettierungen zu schreiben. Hier ein simples Beispiel. Ich benutze ein Skript namens publish, um Pro-Linux-Artikel für die Publikation fertig zu machen. publish erwartet als Argument eine HTML-Datei, und diese hat immer das Suffix .html. Was liegt also näher als die Dateinamens-Vervollständigung mit der Option -G auf Dateien mit dem Suffix .html einzuschränken? Hier ist das Kommando dafür:

complete -G '*.html' publish

Daß es funktioniert, kann man sofort feststellen. Man könnte noch die Option -o dirnames hinzufügen, um in dem Fall, daß keine HTML-Datei im aktuellen Verzeichnis liegt, die Unterverzeichnisse zur Auswahl zu bekommen. Im Allgemeinen mag das ratsam sein, doch bei meinem Programm macht das keinen Sinn, daher habe ich es weggelassen.

Sicher fallen Ihnen nun weitere Beispiele ein, vielleicht sogar solche, die für die Allgemeinheit nützlicher sind als meines :-)

Die Datei ~/.bash_completion

Wenn Sie jetzt eine eigene Komplettierung geschrieben haben, wohin damit? Man kann sie natürlich in ~/.profile eintragen. Ein besserer Platz laut FAQ scheint jedoch ~/.bash_completion zu sein. Wenn diese Datei noch nicht vorhanden ist, legen Sie sie einfach an und schreiben Ihr complete-Kommando hinein. Auch eventuelle Hilfsfunktionen können Sie hier unterbringen. Sie müssen die Datei ausführbar machen, sonst hat sie keinen Effekt.

  • Dieses Werk wurde unter der GNU Free Documentation License veröffentlicht. Das Kopieren, Verbreiten und/oder Modifizieren ist erlaubt unter den Bedingungen der GNU Free Documentation License, Version 1.2 oder einer späteren Version, veröffentlicht von der Free Software Foundation.

    - Weitere Informationen
Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung