Open Source im professionellen Einsatz
Linux-Magazin 04/2010
© Thomas Max Müller, Pixelio.de

© Thomas Max Müller, Pixelio.de

Was der User tippen will - die Bash ahnt es dank Perl im Vorhinein

Stets zu Diensten

Der Complete-Mechanismus der Shell vervollständigt angefangene Eingaben, sobald der User die Tabulator- taste drückt. Ein Perl-Skript erweitert die Funktion maßgeschneidert.

584

Die [Tab]-Taste hängt oft schon ziemlich ausgeleiert in der Tastatur, so beliebt ist bei vielen das Angebot der Bash-Shell, halb eingegebene Bezeichnungen für Befehle, Verzeichnisse und Dateien auf intelligente Weise zu vervollständigen.

Standardrepertoire

Das Standardrepertoire der Bash-Komplettierung zeigt Abbildung 1. Drückt der Benutzer gleich nach der auf der Kom mandozeile eingegebenen Tastenfolge [L]+[S]+[M] die [Tab]-Taste, vervollständigt die Bash das sofort zu »lsmod«, dem Kommando für die Abfrage installierter Kernelmodule. Warum? Das eingegebene Buchstabentrio stand am Anfang einer Kommandozeile, weshalb es sich um einen ausführbaren Befehl handeln muss. Im eingestellten Pfad (»$PATH«) fand sich kein anderer Befehl mit diesen drei Anfangsbuchstaben, also tat die Bash das einzig Richtige.

Auf der Kommandozeile Nummer 2 in Abbildung 1 gab der User hingegen nur zwei Buchstaben vor und tippte nach »ls« auf die [Tab]-Taste. Auch hier kommt nur ein Befehl und keine normale Datei in Frage. Aber die Vorgabe ist nicht eindeutig, denn im Pfad befinden sich Dutzende von Kommandos, die mit »ls« beginnen. Also schweigt die Bash still und wartet, bis der Benutzer noch ein weiteres Mal auf [Tab] drückt, woraufhin sie dann eine kompakte Auflistung aller möglichen Ergebnisse präsentiert und den User weitere Buchstaben eingeben lässt, um die Anzahl der Treffer einzuschränken.

1731 Möglichkeiten

Erfolgt der [Tab]-Tastendruck im zweiten Wort einer Zeile oder danach wie in der vierten Kommandozeile in Abbildung 1, folgert der Ergänzungsmechanismus, dass der User dem Kommando »ls« eine Datei zugesellen will. Allerdings passen darauf sehr viele, sodass die Bash nach einem einmaligen [Tab] stillschweigt und nach einem Doppeldruck wie in Zeile 5 erst einmal nachfragt, ob sie wirklich alle 1731 Möglichkeiten anzeigen soll. Gibt der User mehr Buchstaben vor wie in den Zeilen 6 und 7 und schränkt damit die Lösungen ein, folgt auf einen Doppel-[Tab] wieder eine Auflistung sinnvoller Ergänzungen. Erst wenn die Wahl eindeutig ist, komplettiert die Bash die Zeile.

Abbildung 1: Normalerweise vervollständigt die Bash Kommandos und Namen zu bearbeitender Dateien, sobald der User die [Tab]-Taste drückt.

Auch Teilergänzung kommt vor: Gibt der User wie in Kommandozeile 8 »/etc/up« vor und drückt einmal auf [Tab], vervollständigt die Shell sofort auf »/etc/update«, obwohl, wie sich hinterher herausstellt, es mit »update-manager« und »update-notifier« zwei Möglichkeiten gibt. Die Teilkomplettierung war jedoch hilfreich, um den Pfad bis zum Scheideweg abzukürzen.

Das auf der Bash-Manualseite (»man bash«) unter »Programmable Com­ letion« dokumentierte »complete«-Kommando erlaubt es dem programmierwütigen Shellanwender, das Standardrepertoire gehörig aufzupeppen. Das Projekt Bash Completion [2] bietet eine ganze Sammlung von Ergänzungsregeln zum Download an, die der Nutzer dann in der lokalen Datei ».bashrc« einbindet.

Dieses Gehirnimplantat für die Bash bringt ihr kommandospezifische Regeln bei und vervollständigt Kommandooptionen. Gibt der User zum Beispiel die Zeichenfolge »git com« ein und drückt die [Tab]-Taste, vervollständigt der Mechanismus zu »git commit«, da dies das einzige verfügbare Subkommando des Versionskontrollwerkzeugs ist, das mit »com« anfängt. Weitere Erläuterungen der Complete-Funktion finden sich in kurzen Abschnitten in Büchern zum Thema Bash, etwa in [4] und [5].

Doch während die Skriptsammlung auf [2] Bash-Funktionen baut, wissen erfahrene Perl-Programmierer, dass Shellskripte zwar schnell von der Hand gehen, sich mit steigender Komplexität jedoch oft als Sackgasse erweisen. Schuld sind die begrenzten Kapselungsmöglichkeiten der Shell. Manch ein Shellskript hätte sein Programmierer besser gleich in einer vollständigen Skriptsprache implementiert, denn früher oder später wird es eh umgeschrieben, sobald es über einen Prototyp hinauswächst.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Jump: Bookmarks für die Bash

    Die Entwickler Flavio Castelli und Giuseppe Capizzi haben mit ihrer Software Jump einen Bookmark-Mechanismus für die Bash veröffentlicht.

  • Komfort-Funktionen für die Shell: Bash-Completion 1.0

    Bash-Completion ist in Version 1.0 verfügbar. Das Tool stellt vorgefertigte Funktionen für die programmierbare Kommandozeilen-Ergänzung der Standard-Linux-Shell bereit.

  • Bash-Completion 1.1: Mehr Komfort für die Shell

    Die Bash-Shell bietet seit langem die Möglichkeit, die Befehlsvervollständigung durch eigene Skripte zu erweitern. Das Paket Bash-Completion liefert fertige Skripte für viele Linux-Kommandos und ist jetzt in Version 1.1 erhältlich.

  • Shell Flags parst Kommandozeilen

    Die Bibliothek Shell Flags, ein Getopt-Ersatz für Bourne-kompatible Shells, ist in Version 1.0.0 erschienen.

  • Bash Bashing

    Über Klicki-Bunti und grafische Oberflächen sollten Kommandozeilen-Fans gerechterweise nur dann die Nase rümpfen, wenn sie die Effizienz steigernden Bedienungstricks der interaktiven Shell auch wirklich kennen und benutzen. Diesmal: Bash Completion.

comments powered by Disqus

Ausgabe 08/2016

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.