Zsh statt Bash
Im Zeichen des Z
Die Z-Shell gilt als Geheimtipp unter Konsolenfreunden. Wer einmal einem Zsh-Anwender bei der Arbeit mit der automatischen Vervollständigung zugesehen hat, weiß warum.
Die Z-Shell gilt als Geheimtipp unter Konsolenfreunden. Wer einmal einem Zsh-Anwender bei der Arbeit mit der automatischen Vervollständigung zugesehen hat, weiß warum.
Die interaktive Standardshell Bash ist dem erfahrenen Linuxer wohlvertraut. Doch wie wäre es mit einer Shell, die Vertipper korrigiert und einen Vervollständigungsmechanismus besitzt, der sie zum Traum aller Tippfaulen macht? Dies alles bietet die Zsh [1], von Paul Falstad Anfang der 90er Jahre geschrieben. Sie steht unter einer BSD-artigen Lizenz und ist als Paket in fast allen Linux-Distributionen verfügbar. Die Distribution Grml setzt sie sogar als Standard ein (Abbildung 1).
Als erste praktische Option sei die Eingabekorrektur genannt, die der Befehl »setopt correct« aktiviert. Dabei entspricht »setopt Option« dem »shopt -s Option« der Bash, während »setopt noOption« sowie »unsetopt Option« analog zu »shopt -u Option« bei der Bash sind. Eine vollständige Liste aller Konfigurationsvariablen zeigt das Kommando »setopt kshoptionprint; setopt«. Ist die Option »correct« gesetzt, so versucht die Zsh falsch geschriebene Befehle zu korrigieren. Testen lässt sich das etwa durch Absetzen des Befehls »sl«, der in gängigen Distributionen gar nicht als Kommando existiert.
Die Zsh fragt dann mit »zsh: correct `sl' to `ls' [nyae]?«, ob der Anwender den Befehl durch »ls« ersetzen will, was dieser entweder mit [Enter] oder [N] ablehnt, mit [Y] bestätigt oder mit [A] abbricht. Die Taste [E] erlaubt es ihm, die eingegebene Kommandozeile noch einmal zu editieren.
Die Einstellung »setopt histignorespace« stellt sicher, dass ausgeführte Kommandos, die mit einem Leerzeichen beginnen, nicht in der Zsh-History landen. Das ist etwa dann von Interesse, wenn der Benutzer in der Kommandozeile ein Passwort mitgeben muss.
Zum schnellen Wechseln in ein Verzeichnis dient »setopt auto_cd«. Gibt der Anwender ein Kommando ein, das nicht im Programmpfad steht, aber einem Verzeichnisnamen entspricht, wechselt die Z-Shell stattdessen in das Verzeichnis. Weitere Informationen zu den über 150 verfügbaren Optionen gibt es in der Manpage »zshoptions(1)«.
Die große Stärke der Zsh ist der Vervollständigungsmechanismus. Zum Aktivieren dient der folgende Befehl:
autoload -U compinit && compinit
Ab sofort sollte etwa nach Eingabe von »ssh« und Drücken von [Tab] ein Auswahlmenü mit Benutzernamen sichtbar sein. Mit den Cursortasten lässt sich zwischen diesen Menü-Eintragen navigieren. Sobald »ssh user@« in der Kommandozeile eingegeben ist, bringt erneutes Drücken von [Tab] eine Liste von Hostnamen zum Vorschein. Diese Informationen bezieht Zsh aus Dateien wie »/etc/hosts« und »~/.ssh/config«.
Wie praktisch dieser Mechanismus im Alltag ist, zeigt sich bei der Vervollständigung von Befehlen mit besonders vielen Optionen wie etwa Rsync. Die mehreren Hundert Optionen des Synchronisationsprogramms sind mit Hilfe von »rsync --[Tab]« einfach und schnell zugänglich (Abbildung 2).
Abbildung 2: Die Vervollständigung der Zsh ist bei Kommandos mit vielen Optionen besonders hilfreich. Daneben kann sie auch User und Hosts ergänzen.
Der Prompt der Zsh ist standardmäßig minimalistisch konfiguriert, lässt sich aber über die Umgebungsvariable »PROMPT« verändern. Für die Umsetzung eines dynamischen Prompts gibt es Funktionen: »chpwd« kommt zur Ausführung, wenn sich das Arbeitsverzeichnis ändert, »precmd« vor dem Setzen des Prompts und »preexec« beim Absetzen eines Kommandos.
Eine beeindruckende Anwendung von »precmd« demonstriert das Feature »vcs_info« von Frank Terbeck, das es seit der Zsh-Version 4.3.7 gibt: Wechselt der Anwender in ein Verzeichnis, das mit einem Versionskontrollsystem wie Git, CVS, Subversion oder einem ähnlichen verwaltet wird, zeigt der Prompt aktuelle Informationen zu diesem Repository (Abbildung 3). Listing 1 zeigt die erforderlichen Zeilen für die Zsh-Konfiguration.
Abbildung 3: Das Feature »vcs_info« blendet im Prompt Informationen aus Versionskontrollsystemen wie Git oder Subversion ein.
|
Listing 1: |
|---|
01 autoload -Uz vcs_info
02 precmd() {
03 psvar=()
04 vcs_info
05 [[ -n $vcs_info_msg_0_ ]] && psvar[1]="$vcs_info_msg_0_"
06 }
07 PROMPT="%n@%m:%~%(1v.%F{green}%1v%f.)%# "
|
Die vorgestellten Funktionen, Optionen und weitere Konfigurationsanweisungen sollen natürlich persistent, also über einen Neustart der Zsh hinaus, verfügbar sein. Dafür sorgen Einträge in den Konfigurationsdateien. Für die interaktive Arbeit mit der Zsh sind das je nach verwendeter Distribution »/etc/zshrc« oder »/etc/zsh/zshrc« sowie »$ZDOTDIR/.zshrc«. Solange »ZDOTDIR« nicht gesetzt ist, nimmt Zsh dafür »HOME« an.
Wer also die vorgestellten Einstellungen in der persönlichen Zsh-Konfiguration ablegen möchte, fügt die Kommandos in die Datei »$HOME/.zshrc« ein. Details zu den Konfigurationsdateien sind im Abschnitt "Startup/Shutdown Files" der Manpage »zsh(1)« zu finden, eine minimale Konfiguration kann wie Listing 2 aussehen. Das Grml-Projekt stellt eine fertige Konfiguration in dem umfangreichen und gut dokumentieren Paket Grml-Zshrc [2] zur Verfügung.
|
Listing 2: |
|---|
01 setopt auto_cd correct histignorespace no_beep 02 eval $(dircolors) 03 PROMPT='%n@%m:%~%# ' 04 export EDITOR=vim 05 export PAGER=less 06 autoload -U compinit && compinit |
Alle Rezensionen aus dem Linux-Magazin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...