Die Hotwire-Shell hat sich zum Ziel gesetzt, die oft umständliche Arbeit in der Konsole mit Interaktionen zu vereinfachen und langfristig die traditionellen Eingabefenster zu ersetzen.
Hotwire [1] versteht sich selbst als intelligente, hybride text- und grafikorientierte Shell für Entwickler und Administratoren. Als Besonderheit gegenüber normalen Shells verfügt sie unter anderem über eine interaktive Ein- und Ausgabe (Abbildung 1).

Abbildung 1: Die interaktive Shell Hotwire trennt den Ein- und Ausgabebereich in verschiedene Fenster.
Um ihren Anspruch umzusetzen und den altehrwürdigen Shells wie die Bash ernsthaft Paroli zu bieten, muss das auf Python basierte Programm schon einiges aufweisen. Ob dem so ist, soll der Praxistest zeigen.
Basics
Da keine der gängigen Distributionen Hotwire mitbringt, gilt es, das Programm nachträglich zu installieren (siehe Kasten “Installation”). Die folgende Beschreibung bezieht sich auf den Einsatz unter Fedora 7, das standardmäßig Gnome verwendet, den “natürlichen LebensraumW von Hotwire. Allerdings bereitet auch der Betrieb in einer KDE-Umgebung keinerlei Probleme.
Nach der Installation starten Sie Hotwire auf dem Gnome-Desktop über Anwendungen | Systemwerkzeuge | Hotwire Shell, im K-Menü der KDE finden Sie es unter System |Terminals | Hotwire Shell. Alternativ rufen Sie das Tool mit der Eingabe von hotwire & in der Kommandozeile auf. An Argumenten beim Programmaufruf akzeptiert das Tool lediglich --debug[-modules...] und --help. Abgesehen von der Anzeige der Hilfe sind diese Argumente allerdings nur für Entwickler von Belang.
Der obere Teil des Hotwire-Fensters enthält die Menüleiste, in der Mitte sehen Sie den Ausgabebereich, darunter die Hotwire-eigene Befehls-History, welche die letzten drei ausgeführten Kommandos anzeigt. Am unteren Ende finden Sie die Leiste zur Befehlseingabe. Das Trennen von Ein- und Ausgabe ermöglicht Ihnen die Eingabe von neuen Befehlen, während Sie beispielsweise noch eine Dateiausgabe in einem Pager betrachten. Die Anzeige des aktuellen Verzeichnisses und eventuell noch offener Pipes zeigt die Statusleiste an der Unterkante des Fensters.
Installation
Hotwire liegt aktuell in der Version 0.590 vor. Bei dieser noch recht niedrigen Versionsnummer ist die Integration in die verschiedenen Distributionen unterschiedlich weit fortgeschritten: Unter Fedora-Core 7 installieren Sie Hotwire mit yum install hotwire. Falls Sie Mandriva-Linux Spring 2007 nutzen, müssen Sie den Zweig /contrib/backports aktivieren. Als Anwender von Ubuntu laden Sie Hotwire unter [2] herunter. Für Debian steht die Shell noch auf der Wunschliste, weswegen Sie sie selbst aus den Sourcen kompilieren müssen.
Anwender von Suse finden bei Packman [3] fertige RPM-Pakete. Im Test verweigerte Hotwire unter Suse Linux 10.0 jedoch mit dem Hinweis auf das fehlende Paket cairo den Start, obwohl es existiert. In jedem Fall muss Python in der aktuellen Version installiert sein. Diese Abhängigkeit sollten die distributionsspezifischen Paketmanager jedoch selbständig auflösen.
Sobald Sie den ersten Buchstaben eines Kommandos eingeben, öffnet sich oberhalb der Eingabezeile ein neuer Anzeigebereich. Dieser dient zum Autovervollständigen und listet in alphabetischer Reihenfolge alle Befehle auf, die auf Ihre bisherige Eingabe passen (Abbildung 2).

Abbildung 2: Unter der Befehlseingabe zeigt Hotwire im oberen Bereich die klassische Autovervollständigung und im unteren Übereinstimmungen mit der History.
Hotwires interne Kommandos, Builtins genannt, stehen in der Hierarchie über externen Kommandos. Geben Sie als Beispiel den Builtin-Befehl ls ein, verwendet die interaktive Shell diesen anstelle des systemeigenen Ls-Befehls.
Durch Drücken von [Tab] wechseln Sie von oben nach unten durch die Liste der Systemkommandos, mit [Umschalt]-[Tab] wechseln Sie dir Richtung. Mit den Tasten [Pfeil-oben] und [Pfeil-unten] durchforsten Sie die Hotwire-interne History. Hierzu erscheint das markierte Kommando automatisch in der Eingabezeile, das Sie mit [Eingabe] ausführen (Abbildung 3). Eine Auswahl mit der Maus unterstützt Hotwire nicht.

Abbildung 3: Hotwire übernimmt Ihre Auswahl aus der Befehlsvervollständigung automatisch in die Befehlszeile.
Einfache Kommandos wie beispielsweise ls erledigen Sie so sehr zügig. Nach dem Verzeichniswechsel via cd listet Hotwire den Inhalt des neuen Ordners automatisch im darüber liegenden Fenstern auf. Der Builtin-Befehl ls ordnet jedem Dateitypen in der Ausgabe ein passendes Symbol zu und stellt diese damit wie ein Dateibrowser dar. Ein Klick auf einen Dateinamen oder ein Ordnersymbol übersetzt Hotwire in die dazugehörige Standardaktion und nimmt diese in die History auf. So wechseln Sie in der Shell via Mausklick in Verzeichnisse oder editieren Textdateien. Der Ordnerwechsel klappt jedoch nur bis zur zweiten Verzeichnisebene. Danach stellt Hotwire die folgenden Unterverzeichnisse zwar noch dar, das Öffnen via Mausklick schlägt jedoch fehl. Ebensowenig unterstützt es das Ausführen von Programmen per Mausklick – dieses Feature steht allerdings auf der Roadmap der Entwickler.
Geschichte
Die History der Hotwire-Shell unterscheidet sich gründlich von der History-Funktion anderer Shells wie der Bash. Hotwire speichert Kommandoabfolge von anderen Shells unabhängig in der Datei ~/.hotwire/persist/history.p. Das bedeutet, dass es das Programm nicht erlaubt, auf Befehle zurückzugreifen, die Sie in einer normalen Unix-Shell eingegeben haben, und umgekehrt. Genauso verhält es sich mit Aliasen: Haben Sie beispielsweise den Alias alias c=clear definiert, steht dieser nur in der Shell zur Verfügung, in der Sie ihn angelegt haben.
Hotwire zeigt Ihnen zwischen Menüleiste und Ausgabebereich die letzten drei Befehle der aktuellen Sitzung. Klicken auf einen davon, erscheint ein kleines Menü mit den Einträgen Show und Remove. Während Show ein weiteres Ausagbefenster öffnet und den Inhalt der Aktion darin anzeigt, entfernt Remove das Kommando samt seiner Ausgabe aus dem Verlaufsspeicher. Den sichtbaren Ausgabebereich blenden Sie mit einem Klick auf das darüber stehende Kommando und Hide wieder aus. Mit [Strg]+[Bild-oben]/[Bild-unten] wechseln Sie den Fokus zwischen den Ausgabebereichen.
Mit der Tastenkombination [Strg]+[S] durchforsten Sie den aktuellen Ausgabebereich nach Textmustern. Die Suche erfolgt in Echtzeit nach jedem eingegebenen Buchstaben (Abbildung 4). Übereinstimmungen stellt Hotwire in Fettschrift dar. Allerdings durchsucht das Programm nur reine Textausgaben. Gerenderte Ausgaben, wie etwa das Ergebnis von ls, durchforstet Hotwire nicht. Mit [Esc] beenden Sie die Suche.

Abbildung 4: Die integrierte Suchfunktion von Hotwire ermöglicht in Echtzeit das Durchforsten von Textdokumenten nach Begriffen.
Rechts in der History zeigt das Programm einen Undo-Button, der es ermöglicht, die letzten drei Aktionen rückgängig zu machen. Das funktioniert auch für den Builtin-Befehl rm. Er benötigt zum Löschen von Verzeichnisbäumen keine weiteren Optionen (wie etwa -r bei traditionellen Unix-Shells).
Der Builtin-Befehl filter, der auch gerenderte Ausgaben nach regulären Ausdrücken durchsucht, stellt Hotwires Pendant zu grep dar. Die Suche via Filter unterscheidet zwischen Groß- und Kleinschreibung. Sie binden das Kommando über eine Pipe ein: So zeigt ein ls | filter Desk im Home-Verzeichnis als Ausgabe nur noch den Desktop-Ordner an.
Desweiteren kennt Filter zusätzliche Parameter. Der Befehl ls | filter conf cmd listet aus den Einträge im aktuellen Verzeichnis alle ausführbaren Dateien (cmd) auf, welche die Buchstabenfolge conf enthalten. Die dokumentierte Liste der verfügbaren Parameter ist allerdings recht kurz und umfasst neben cmd nur noch owner_name zum Filtern nach Besitzern. Als angenehme Randerscheinung listet Filter sich niemals selbst auf, das lästige | grep -v grep entfällt also.
Fallen
Laut Dokumentation unterstützt Hotwire Pipes, mit denen Sie mehrere Kommandos hintereinander hängen, wie in einer normalen Unix-Shell. In der Praxis übersetzt das Programm aber beispielsweise das gängige ls | less zu ls | sh /usr/bin/less und gibt damit zwar das aktuelle Verzeichnis aus, allerdings erfolgt die Anzeige nicht seitenweise. Less verhält sich, als wäre es an der Ausgabe überhaupt nicht beteiligt. In Anbetracht des seitlichen Rollbalkens fällt dieses Verhalten jedoch nicht sonderlich ins Gewicht.
Anders sieht es beim Aufruf von less Datei aus. Die Ausgabe wird dann wie die von cat Datei angezeigt. Damit findet der Start des Editors nach Drücken von [V] ebenfalls nicht statt. Hotwire interpretiert diesen Tastendruck lediglich als Beginn eines neuen Befehls. Ein- und Ausgabeumleitungen mittels < und > kennen die Hotwire-Builtins überhaupt nicht; leider gibt die Website keinerlei Aufschluss darüber, ob die Entwickler diese Funktion planen.
Einen Ausweg bietet die Ausgabeumleitung mit externen Programmen: Der Befehl sh /bin/ls -l /bin > ~/ls datei arbeitet planmäßig und legt die Datei samt Inhalt im Heimatverzeichnis an.
Sh versus Term
Beim Betrachten der Autovervollständigung fällt das Präfix sh auf. Das liegt daran, dass Hotwire externe Shell-Kommandos mit Hilfe des Builtins sh ausführt. Deshalb übersetzt die Shell ein einfaches ifconfig automatisch zu sh /sbin/ifconfig. Wichtig ist dabei, dass sich sh nur für die Textausgabe eignet.
Das macht sich bei interaktiven Programmen wie beispielsweise dem textbasierten Browser links bemerkbar. Versuchen Sie, Links via sh links zu starten, erhalten Sie keine Fehlermeldung. Da Links aber nicht nur Text generiert, sondern auch Eingaben erwartet, kann sh nichts damit anfangen und beschwert sich lediglich über No Output.
Für diese Fälle ist ein weiteres Builtin namens term zuständig, das einen neuen Tab mit dem aufgerufenen Programm startet. Der richtige Befehl lautet in unserem Beispiel term links. Hotwires Dokumentation rät sogar, Term zu versuchen, wenn ein Befehl nicht wie erwartet arbeitet. Ein term less Datei öffnet die Datei in einem neuen Tab mit Less. Hier funktioniert auch [V] wieder ordnungsgemäß. Beim Beenden von Less schließt Hotwire den Tab automatisch. Eine Pipe zu Less funktionierte im Test jedoch nicht. Diesbezügliche Versuche ergaben zudem, dass Term nicht rechts von einem Pipe-Zeichen stehen darf. Der Befehl ls | term less und seine möglichen Varianten führten stets zu einem Syntaxfehler.
Wunschliste
Für Anwender normaler Shells “fühlt” sich Hotwire zunächst ungewohnt an, da es völlig aus dem von anderen Konsolen bekannten Schema ausschert. Sowohl mit der gerenderten Ausgabe der Anzeige, die beispielsweise beim Befehl ls das Anklicken der Ergebnisse ermöglicht, als auch der Undo- und History-Funktion erleichtert Hotwire allerdings nach einer gewissen Einarbeitungszeit die Arbeit erheblich.
Um dem Anspruch gerecht zu werden, gegen die etablierten Shells zu konkurrieren, fehlen allerdings wichtige Punkte: Ganz oben auf der Wunschliste steht eine ausführliche Dokumentation [4], gefolgt von der Integration der alten Umgebung (Aliase und Profile) und der vollständige Implementierung von Pipes und Umleitungen. Auch sollte Hotwire das umständliche Unterscheiden von sh und term automatisieren. Eine scrollbare History, die mehr als drei Einträge umfasst, hätte zudem erheblichen Charme.
Glossar
-
Builtins
-
Befehle, die in das betreffenden Programm einprogrammiert sind. Zusätzliche Programme sind für deren Ausführung nicht notwendig. Hotwire implementiert zum Beispiel den Befehl
lsselbst.
[1] Hotwire Shell: http://code.google.com/p/hotwire-shell/
[2] Hotwire für Ubuntu: http://www.getdeb.net/app.php?name=Hotwire
[3] Hotwire für Suse.: http://packman.links2linux.de/package/hotwire/28867
[4] Online-Dokumentation: http://code.google.com/p/hotwire-shell/wiki/GettingStarted





