Die Z-Shell (zsh)
Eine mächtige Alternative zur Bash
Hochgradig konfigurierbarer Prompt
In der Z-Shell kann man nicht nur die linke Seite des Prompts, sondern auch die rechte Seite konfigurieren. Der Prompt in der Abbildung ist eine abgeänderte Version von Phil!s ZSH Prompt.
Die Anzeige der Uhrzeit inklusive Sekunden ist recht praktisch, da man daran sieht, wie lange ein Befehl gedauert hat oder wann man ihn ausgeführt hat. Es gibt jedoch auch die Möglichkeit, automatisch die Ausgabe von time
bei der Beendigung eines Befehls ausgeben zu lassen, der länger als eine vorher definierte Zeit benötigt hat.
ZLE-Widgets
Der Z-Line-Editor ZLE ist sozusagen die Eingabezeile in der zsh. Mit diesem kann man sich kleine Programme schreiben, die einem das Leben vereinfachen.
Ein Beispiel wäre ein Programm, dass bei der Eingabe von ...
diese zu ../..
umwandelt. Jeder weitere Punkt wird wieder umgewandelt. So kann man recht einfach folgendes eingeben:
cd ..../directory
Auf dem Bildschirm erscheint jedoch folgendes:
[/listing] cd ../../../directory
Diese Erweiterung ist nicht Standard der Z-Shell. Man kann sie aber durch folgenden Code in der Konfigurationsdatei ~/.zshrc erzeugen:
rationalise-dot() { if [[ $LBUFFER = *.. ]]; then LBUFFER+=/.. else LBUFFER+=. fi } zle -N rationalise-dot bindkey . rationalise-dot
Automatisches tee-ing
In der Z-Shell kann man die Ausgabe eines Kommandos recht einfach in mehrere verschiedene Dateien umleiten. Statt wie in der Bash
ls | tee -a all | tee actual
zu schreiben, kann man in der zsh einfach
ls >>all >actual
eingeben. Beide Befehle führen ls
aus und hängen die Ausgabe an die Datei all an und schreiben sie in die Datei actual, wobei der Inhalt
der letzten dabei überschrieben wird. Möchte man die Ausgabe wie beim original tee
-Befehl auch auf dem Bildschirm sehen, so leitet man sie auch noch auf STDOUT um:
ls >>all >actual >&1
Verzeichnisse durch Ersetzung wechseln
Ein Beispiel sollte dies am besten erklären. Angenommen, man hat die zwei Verzeichnisse ~/development/scripting/perl/modules und ~/development/scripting/python/modules und befindet sich in ~/development/scripting/perl/modules, so kann man durch den Befehl
cd perl python
in das Verzeichnis ~/development/scripting/python/modules wechseln.
Bei einem cd
-Kommando mit zwei Parametern wird im aktuellen Verzeichnis-String das erste Wort durch das zweite ersetzt. Hier also perl
durch python
.
Fazit
Viele der hier beschriebenen Beispiele sind sicherlich auch mit Erweiterungen in der Bash möglich. Sie zeigen aber auf jeden Fall, dass die Z-Shell jede Menge interessante Möglichkeiten bietet. Die oben gezeigten Funktionen sind aber meist nur angerissen und liefern nur eine kleine Auswahl von dem, was die Z-Shell zur Verfügung stellt. Darüber hinaus besitzt die Z-Shell eine ganze Reihe Module (z.B. für Matheoperationen oder einen eigenen FTP-Client), die man bei Bedarf laden kann. Sehr schön ist auch die Möglichkeit, den Screen-Titel von der zsh aus zu setzen. Es lohnt sich auf jeden Fall, diese Shell etwas genauer zu betrachten.
Im Netz findet man sehr viele Seiten, welche die Funktionen der zsh näher beschreiben, darunter Michael Prokops zsh-Liebhaberseite, das ZshWiki oder »Zzappers Best of ZSH Tips«.
Autoreninformation
Marcel Jakobs arbeitet gerne auf der Kommandozeile. Auf Anregung eines zsh-Nutzers hin hat er sich diese Shell genauer angesehen und ist aufgrund der vielen Möglichkeiten dabei geblieben.
Dieser Artikel ist in freiesMagazin 03/2010 erschienen. Veröffentlichung mit freundlicher Genehmigung des Autors.