ADMIN-Tipp: Shell mit eingebautem Python

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Die Xonsh erlaubt es, auf der Kommandozeile Python-Syntax zu verwenden.

Diverse Varianten der Unix-Shell haben sich als Eingabe-Interface für Linux- und Unix-Systeme etabliert. Bei Linux ist das meist die Bash-Shell (Bourne-again Shell) des GNU-Projekts, die gegenüber der originalen Bourne-Shell zahlreiche Erleichterungen bietet. Dennoch sind viele Dinge in der Bash nur umständlich und/oder mit anderen kleinen Tools zu lösen.

Einen alternativen Ansatz verfolgt die Xonsh , die Python und Shell-Syntax verbindet. Interaktiv versteht die Xonsh die meisten Shell-Befehle, kann also in Verzeichnisse wechseln, Inhalte ausgeben und so weiter. Darüber hinaus interpretiert Xonsh alle anderen Eingaben als Python-Syntax. Der in Xonsh implementierte Parser versucht zunächst immer die Shell-Syntax und verwendet, wenn das nicht gelingt, den Python-Modus. Das folgende Beispiel zeigt, wie Xonsh mit Grenzfällen umgeht:

$ ls
test1.py test1.txt
$ ls = "beliebiger string"
$ ls
'beliebiger string'
$ "ein " + ls
'ein beliebiger string'
$ del ls
$ ls
test1.py test1.txt

Besonders nützlich ist Xonsh, wenn man Shell- und Python-Befehle kombiniert, um umständlichen Shell-Operationen aus dem Weg zu gehen. Zum Beispiel sind Berechnungen mit Integer- und Float-Zahlen wesentlich einfacher, denn sie sind in der Sprache eingebaut. Auch kann man auf das komplette Repertoire der Python-String-Operationen zurückgreifen. Wie die Bash erlaubt es die Xonsh, die Ausgabe von Befehlen in (Python-)Variablen zu speichern, etwa so:

$ var = $(ls)

Im Unterschied zur Unix-Shell sind in der Variablen, die sich ohne Dereferenzierung mit Dollar-Zeichen auslesen lässt, dann aber die Dateinamen getrennt durch Zeilenumbrüche abgelegt.

Um Regular Expressions bei Dateioperationen zu verwenden, muss der Xonsh den entsprechenden Ausdruck in Backticks einschließen. So gibt der folgende Aufruf alle Dateien und Verzeichnisse aus, deren Name eine Zahl enthält.

$ ls `\d`

Die nachfolgende Schleife zeigt, wie man in der Xonsh den Inhalt eines Verzeichnisses verarbeiten kann:

for f in $(ls).split('\n'):
   f.upper()

Eine ähnliche Schleife sähe in der Bash nur unwesentlich komplizierter aus, wäre allerdings schon wieder fehleranfälliger, wenn in Variablennamen Leerzeichen enthalten wären:

for f in $(ls); do
   echo $f | tr [:lower:] [:upper:]
done

Zudem muss man sich zu jedem Shell-Builtin die jeweils eigene Syntax merken: Bei einer For-Schleife ein Do, bei einer If-Abfrage ein Then, und muss das nochmal in derselben Zeile stehen oder braucht man ein Semikolon?? Wer die Bash-Syntax perfekt beherrscht, kann sich die Beschäftigung mit der Xonsh sparen, aber für Anwender, die öfter Python programmieren, ist sie einen Blick wert.

Die Xonsh setzt Python in Version 3.4 voraus und lässt sich mit einem Aufruf von "pip3 install xonsh" installieren.

 

16.03.2015
comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023