Zurück

Selbstdefinierte Tabcompletion in der Bash

Mit der Tab Taste lassen sich leicht Dateinamen und Kommandos automatisch vervollständigen sobald diese eindeutig sind. Ist es Ihnen aber nicht auch schon mal so gegangen, das Sie sich wünschten diese Funktion auch z. B. für die Optionen von make oder z. B. bei Befehlen die einen Usernamen oder Gruppennamen erwarten, gerne hätten? Erweitern Sie doch einfach die Autovervollständig um Ihre eigenen Definitionen.

Für diese eigenen Erweiterungen gibt es den in die Bash integrierten Befehl complete. Möchten sie z. B. eine neue Vervollständigung für Gruppennamen beim Befehl chgrp können sie folgendes Kommando verwenden:

complete -g -f chgrp

Was bedeutet dies? Die Syntax von complete verlangt erst welche Komplettierungen vorgenommen werden sollen und danach bei welchen Befehlen. -g steht dabei für Gruppennamen und -f für Dateinamen (welche wir ja auch weiterhin wollen).

Möchte ich nun beispielsweise für den Befehl chown einstellen, das sowohl Usernamen als auch Gruppennamen, als auch Dateinamen komplettiert werden, kann ich folgendes Kommando benutzen:

complete -u -g -f chown

Es ist auch möglich explizit Verzeichnisse und Dateien getrennt zur Vervollständigung zu behandeln. Möchte ich zum Beispiel das der Befehl rmdir nur Verzeichnisse aber keine normalen Dateien vervollständigt kann ich dafür den Parameter -d einsetzen:

complete -d rmdir

Die Parameter -u, -g, -f und -d erlauben mir jedoch nur vorgegebene Parameter wie Usernamen oder Verzeichnisse zu Kommandos zuzuordnen, was aber wenn ich dem Befehl make, make-Ziele wie install clean oder menuconfig zuordnen will? Auch dafür gibt es eine Lösung. Selbstdefinierte Optionen kann ich einem Befehl über den Parameter -W zuordnen.

Das kann z. B. so aussehen:

complete -W "install clean modules_install menuconfig oldconfig" make

Ich schreibe also nach -W meine Stichwörter in Anführungszeichen und ordne sie dem Befehl zu. Wenn sie diese Definitionen nun behalten möchten, dann schreiben Sie sie in eine Datei die von der Shell beim starten eingelesen wird, wie z. B. ~/.bashrc. Eine vollständige Liste der Parameter für complete erhalten Sie in der manpage der bash.

Zurück

Zurück nach oben
Shell mit Kommandoprompt