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

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Loadtests ohne Server

Für Loadtests der eigenen Server bietet sich die Cloud an, denn kurz getaktet lassen sich dort viele Rechnerinstanzen starten, die das eigene Budget nur wenig belasten. Noch flexibler, günstiger und besser skalierbar sind Tests mit einer Serverless-Infrastruktur wie AWS Lambda. Wir führen vor, wie Sie dort mit Serverless Artillery eigene Loadtests starten. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Container

Wie setzen Sie Container ein?

  • Gar nicht
  • Docker standalone
  • Docker mit Kubernetes
  • Docker mit Swarm
  • Docker mit anderem Management
  • LXC/LXD
  • Rocket
  • CRI-O auf Kubernetes
  • Container auf vSphere
  • Andere (siehe Kommentare auf der Ergebnisseite)

Google+

Ausgabe /2018