Eine Shell, zwei Sprachen, etliche Innovationen: Mit Xonsh können nicht nur Python-Entwickler ordentlich an der Effizienzschraube drehen.
Xonsh bietet ein integriertes Syntax-Highlighting und erlaubt, dieses dem eigenen Geschmack anzupassen.
(Bild: Xonsh)
Trotz aller Entwicklungen im Bereich der Developer-Arbeitsumgebungen – derzeit etwa die große Cloud-IDE-Welle – ist die gute alte Shell als zentrales Werkzeug nicht wegzudenken. Es muss auch nicht immer die Bash sein, es gibt reichlich interessante Bash-Alternativen mit zusätzlichen Features und alternativen Herangehensweisen.
Sei es nun bei der Administration, beim Entwickeln oder der täglichen Büroarbeit, man kommt schnell an den Punkt, wo Shell-Skripte und -Funktionen so umfangreich werden, dass sich eigentlich eine mächtigere Sprache wie eben Python anbietet. Oder aber Python-Befehle erledigen simple Aufgaben schlicht besser bzw. mit einfacherer Syntax – auch dann haben Shell-Befehle, besser gesagt Shell-Tool-Aufrufe, schnell ausgedient.
Genau an dieser Stelle tritt Xonsh auf den Plan. Das Tool bietet nämlich eine Shell, die herkömmlichen Shell-Code und Python auf ein und demselben Prompt verarbeiten kann. Genauer gesagt versteht und verareitet Xonsh sowohl Python-3.6-Befehle als auch aus Bash und IPython bekannte Auszüge. Hinzu kommen ein eigenes System für Add-ons, umfangreiche Konfigurationsmöglichkeiten und eine deutlich erweiterte History.
Zu den weiteren, teils auch von anderen Shells bekannten Features gehören Plattformunabhängigkeit, Tab-Vervollständigung (auch aus man-pages), Syntax-Highlighting und Typvariablen. In der Praxis heißt das auf Code-Seite, dass man für Berechnungen oder Ausgaben sowohl eine Bash- als auch eine Python-Variante verwenden darf:
In beiden Fällen wird jeweils dasselbe Ergebnis ausgegeben, also „4“ oder eben „Hallo Welt“. Selbst bei einer solch simplen Rechnung zeigt sich schon der Vorteil, Python-Syntax nutzen zu können – man hat immer einen Taschenrechner zur Hand.
Sobald es komplexer wird und Schleifen, Abfragen, Variablen, reguläre Ausdrücke, Arrays und so weiter eine Rolle spielen, kommen die Python-Vorteile natürlich mehr und mehr zur Geltung. Das soll aber nicht heißen, dass man sich nicht an die Arbeit in diesem dualen System gewöhnen müsse:
echo The Good, The Bad, and The Ugly
Die Ausgabe wird jeden überraschen, der vergessen hat, sich in Xonsh zu bewegen:
The Good, The Bad,… command not found: The …
Das „and“ wird eben als Operator verstanden, müsste also in Anführungszeichen gesetzt werden, wenn „Bash-Verhalten“ gewünscht wird:
echo The Good, The Bad, „and“ The Ugly
Da der Prompt zunächst nicht unbedingt einen Hinweis auf Xonsh gibt, ist also ein wenig Gewöhnung gefragt. Im Detail gibt es bezüglich der Syntax und des Konzepts natürlich einiges zu lernen, sei es das Quoting, das exakte Verhalten von Subprozessen, der Umgang mit Umbebungsvariablen, Umgebungen und so weiter.
Xonsh ist nicht unbedingt der altgediente bequeme Hauslatschen, sondern eher ein neuer Multifunktionssportschuh, den einzulaufen sich lohnt. Es gibt reichlich „Kleinigkeiten“ zu entdecken und die ordentliche, wenn auch teils recht kurz gehaltene, Xonsh-Dokumentation hilft zumindest Nutzern mit ausgeprägter Shell- und/oder Python-Erfahrung zügig weiter. Ohne ausgeprägte Erfahrungen mit wenigstens einem von beidem könnte Xonsh eher für ausgeprägte Verwirrung sorgen statt für mehr Effizienz.
Installation und Konfiguration
Wie heutzutage üblich, bietet Xonsh viele Möglichkeiten zur Installation; unter Ubuntu funktioniert beispielsweise das übliche „apt-get install xonsh“. Das wäre also eigentlich nicht der Rede wert, allerdings bekämen Sie mit diesem Kommando selbst auf einem aktuellen Ubuntu eine ziemlich veraltete Version von Xonsh, die wegen der recht zügigen Weiterentwicklung interessante Features vermissen lassen würde.
Für die aktuelle Version hat hier sowohl unter Windows als auch Linux die pip-Variante gesorgt:
pip install xonsh
In den älteren Versionen bekämen Sie dann nämlich zum Beispiel nicht das wundervolle Web-Frontend:
xonfig web
Xonsh bietet ein integriertes Syntax-Highlighting und erlaubt, dieses dem eigenen Geschmack anzupassen.
(Bild: Xonsh)
… startet einen lokalen Server und ein Web-Frontend im Browser. Darüber lassen sich Erweiterungen – mehr oder weniger – installieren (mehr dazu gleich) sowie Layouts für Prompt und Syntax-Highlighting festlegen. Freilich geht das auch wie üblich per Dotfile (ähnlich der .bashrc), aber wer kann sich schon die extrem freakige Syntax für die Prompt-Konfiguration merken?
Das Prompt-Layout lässt sich ebenso wie das Syntax-Highlighting personalisieren.
(Bild: Xonsh)
Xonsh spendiert Ihnen jeweils etliche Varianten samt Vorschau, die einfach in den passenden Kasten kopiert und gegebenenfalls angepasst werden. In älteren Versionen gibt es stattdessen einen Einrichtungsassistenten (xonfig wizard) auf Textbasis – auch nützlich, aber sollte dieser erscheinen, sollten Sie aktualisieren.
Add-ons nutzen
Die Add-ons für Xonsh hören auf den Namen Xontribs.
(Bild: Xonsh)
Xonsh beinhaltet einen eigenen Manager für Drittwerkzeuge, die sogenannten Xontribs. Das Einrichten solcher Erweiterungen ist leider ein wenig holprig geraten. Als Beispiel soll das Tool „onepath“ herhalten, das dem Terminal ein vom Desktop bekanntes Verhalten spendiert: Dateiendungen werden automatisch mit Programmen verknüpft und so lassen sich Dateien in den zugehörigen Programmen öffnen, ohne diese explizit angeben zu müssen.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Im Terminal würde man eine Datei „foobar.txt“ etwa mit „vim foobar.txt“ öffnen. Mit der onepath-Erweiterung genügt ein simples „foobar.txt“, um diese im Standardeditor zu öffnen.
Nun können Sie Erweiterungen mittels …
xontrib list
… auflisten lassen – und sehen keinen onepath-Eintrag. Wenn Sie hingegen die Web-Konfiguration über …
xonfig web
… starten, können Sie die Erweiterung im entsprechenden Reiter aktivieren. Nach einem Xonsh-Neustart bekommen Sie dann die Meldung, xontrib-onepath sei aktiviert, aber nicht installiert – was sich dann mit …
xpip install xontrib-onepath
… nachholen lässt. Damit ist es dann installiert, aktiviert – aber noch nicht geladen! Erst nach …
xontrib load onepath
… ist das Tool dann auch einsatzbereit. Weitere Beispiel für Erweiterungen sind Tab-Vervollständigung für Skripte in Xonsh, Navigation mit Autojump, automatische Ausführung von Skripten beim Betreten von Ordnern via cd-Kommando, eine erweiterte Suchfunktion für Kommandoausgaben, ein Debugger, vi-Modus für den Prompt oder ein Aufgabenplaner.
Erweiterte History
Die History in einer Shell-Session kann enorm nützlich sein, um die Arbeit nachvollziehen, Argumente fix anpassen oder schlicht alte Aufgaben wiederholen zu können. Xonsh setzt da aber noch einen drauf: Über History-Dateien lässt sich das Geschehen nämlich auch über mehrere Sessions und Instanzen verfolgen.
Man bekommt also nicht bloß eine Liste mit Befehlen, sondern eine JSON-formatierte Liste mit Informationen zu Umgebungsvariablen, Konfiguration, Desktop, Version, Nutzer und so weiter – Dinge, die sich auch für Auswertungen anbieten! Selbst Diffs zwischen verschiedenen History-Dateien sind möglich. Vor allem aber dürfte die Auflistung sämtlicher Kommandos samt ihrer Rückgabewerte ein gewaltiger Vorteil gegenüber der Standardhistorie sein.
Insgesamt lässt sich sagen, dass Xonsh der Shell-Arbeit eine Menge neues Leben einhaucht, auch wenn der Fokus eher auf Python liegt. Xonsh eignet sich wunderbar für Scripting-Veteranen, die genau wissen, was sie lieber mit Bash-, was lieber mit Python-Code erledigen, aber auch für Shell-Nutzer, die sich langsam an Python herantasten wollen! Features wie die (grafische) Konfiguration, Erweiterungen und die History dürften wohl jeden überzeugen – nach ein, zwei Stündchen Einarbeitung.
Alles Sonnenschein ist aber auch nicht: Einige Kleinigkeiten hemmen hier und da die völlig intuitive Einarbeitung, angefangen mit der versehentlichen Installation veralteter Pakete, die schnell passiert, über das nicht völlig konsistente und vollständige Add-on-Management, bis hin zu syntaktischen Kleinigkeiten. Dass sich etwa Xonsh- und Python-Skripte per „source“, Bash-Skripte aber nur per „source-bash“ ausführen lassen, mag für die Macher „selbstverständlich“ sein, Einsteiger müssen dann doch die Dokumentation zur Hand nehmen.
Alles in allem sei Xonsh aber jedem Terminal-Arbeiter ans Herz gelegt. Falls Sie es testen wollen, hier noch ein kleiner Tipp für ein Problemchen, das vermutlich recht bald auftaucht: Bei der Verwendung von Pipes funktioniert folgendes nicht:
print(„foobar“) | cowsay
Cowsay würde hier als normaler Shell-Subprozess aufgerufen und dieser verträgt als Eingabe nur Strings, keinen Python-Code. Über eine Python-Funktion hingegen funktioniert es:
def a(): print(„foobar“)@(a) | cowsay
Hat man sich einmal an derlei „Kleinigkeiten“ gewöhnt, wird der Python-Shell-Mischmasch zunehmend interessant!