Login
Newsletter
Werbung

Do, 25. März 2010, 19:00

Die Z-Shell (zsh)

Eine mächtige Alternative zur Bash

Die Standard-Shell auf den meisten Linux-Systemen ist die Bash. Sie ist sehr mächtig und erlaubt es, viele Aufgaben zu automatisieren. Dieser Artikel soll sich einer sehr interessanten, noch mächtigeren Shell widmen, der Z-Shell.

Installation und Start

Die zsh lässt sich auf den meisten Linux-Systemen aus der Paketverwaltung über das Paket zsh installieren. Danach kann man sie mit dem Aufruf von zsh ausführen. Um sie zur Standardshell zu machen, genügt der Befehl

chsh -s /usr/bin/zsh BENUTZERNAME

wobei BENUTZERNAME durch den entsprechenden eigenen Benutzernamen ersetzt werden und der Pfad zu zsh stimmen muss. Wo zsh liegt, kann man mit dem Befehl which zsh herausfinden. Auf manchen Systemen liegt zsh beispielsweise in /bin.

Die zsh bedient sich Elementen der Bash, der Korn-Shell (ksh) und der TENEX-C-Shell (tcsh - eine erweiterte C-Shell). Sie ist sehr gut konfigurierbar und fast jedes Verhalten der Bash kann nachgeahmt werden, sodass der Umstieg sehr leicht fällt. Bestehende Bash-Skripte können natürlich weiterhin genutzt werden, wenn der Shebang entsprechend gesetzt ist (siehe »Shebang - All der Kram«, freiesMagazin 11/2009):

#!/bin/bash

Beispiele

Im Folgenden sollen einige interessante Vorteile der zsh kurz durch Beispiele beschrieben werden. Da die zsh sehr viele Möglichkeiten bietet, ist es aber nicht möglich, alles im Detail zu erläutern.

Hinweis: Optionen werden mit dem Befehl setopt gesetzt, gelten aber nur für die aktuelle Sitzung. Um sie dauerhaft zu aktivieren, muss man diese in die Konfigurationsdatei ~/.zshrc schreiben.

Autokorrektur

Die zsh beherrscht einen Mechanismus, der kleine Tippfehler automatisch korrigiert. Hat man in einem Ordner eine Datei testfile.txt und möchte diese nach file2.txt kopieren, so führt man in der Regel den Befehl cp testfile.txt file2.txt aus. Wie von der Bash gewohnt, nutzt man dafür die Autovervollständigung mittels Tab. Bei einem Verschreiber wird dieser in der zsh automatisch korrigiert. Beispiel:

cp tsetf <TAB>

wird automatisch korrigiert und zu

cp testfile.txt

vervollständigt. Die Autokorrektur aktiviert man mit der Option correct.

Globale Aliase

Neben den normalen Aliasen für Kommandos, wie man sie aus der Bash kennt, gibt es in der zsh noch globale Aliase, die überall im Befehl genutzt werden können, nicht nur am Anfang. Zwei Beispiele verdeutlichen dies:

alias -g G='| grep'
alias -g L='| less'

Dies erzeugt die globalen Aliase G und L, die man hinter alle möglichen Befehle schreiben kann, um die Ausgabe des entsprechenden Befehls in grep oder less umzuleiten:

ls G txt

entspricht dem Befehl

ls | grep txt

oder

ps -e L

entspricht

ps -e | less

Natürlich ist dann auch Folgendes möglich:

ls G txt L

was folgendem Befehl entspricht:

ls |grep txt | less

Suffix-Aliase

Mit Suffix-Aliasen kann man Programme festlegen, mit denen bestimmte Dateitypen (anhand ihrer Endung) geöffnet werden sollen. Man braucht dann nur noch den Namen der Datei eingeben und sie wird mit dem entsprechenden Programm geöffnet. Beispiel:

alias -s pdf=evince

legt einen Alias für PDF-Dateien an, die mit Evince geöffnet werden sollen. Danach reicht die Eingabe von

dokument.pdf

und die Datei dokument.pdf wird mit Evince geöffnet.

Aliase für Verzeichnisse: Hashes

Mit sogenannten Hashes lassen sich Aliase für beliebige Verzeichnisse anlegen. Auf diese kann dann sehr einfach zugegriffen werden. Mit dem Befehl

hash -d perl=~/development/scripting/perl

legt man einen Hash namens perl für das Verzeichnis ~/development/scripting/perl an. Auf dieses Verzeichnis kann man jetzt mit ~perl zugreifen - auch innerhalb eines Befehls, wie folgendes Beispiel zeigt:

cp testscript.pl ~perl

Dieser Befehl kopiert die Datei testscript.pl in das Verzeichnis ~/development/scripting/perl.

Auto-CD

Mit der Option autocd kann man zum Wechseln in ein Verzeichnis einfach den Namen eines Verzeichnisses eingeben und das Kommando cd davor weglassen. Wenn es keinen Befehl gibt, der so heißt wie das Verzeichnis, wird in das Verzeichnis gewechselt - falls es existiert.

Kurze for-Schleifen

Statt einem

for i in *.eps; do epstopdf $i; done

um alle EPS-Dateien in einem Verzeichnis in PDF-Dateien umzuwandeln, genügt unter zsh die kürzere Form

for i (*.eps) epstopdf $i

Globale History

Die History, die man mit der Pfeil hoch-Taste durchgehen kann, kann man in der zsh so einstellen, dass sie in jeder zsh-Instanz gleich ist. Das heißt, man hat nicht mehr für jedes Fenster eine eigene History, sondern kann mit der Taste Pfeil hoch auch Befehle auswählen, die in anderen Fenstern eingegeben wurden.

Die History wird jedoch nur nach jedem Befehl aktualisiert. Das heißt, man muss gegebenfalls einmal Return drücken, damit die Befehle aus einem anderen Fenster verfügbar sind.

Dieses Verhalten kann mit der Option share_history aktiviert werden.

Directory Stack

Wie die Bash hat die zsh auch einen Directory Stack. Mit dem Befehl pushd kann man das aktuelle Verzeichnis auf den Stack legen und mit popd das jeweils letzte Verzeichnis vom Stack nehmen und dorthin springen.

Mit der Option auto_pushd legt die zsh automatisch jedes Verzeichnis auf den Directory Stack, aus welchem man in ein anderes Verzeichnis wechselt. So hat man immer eine History der Verzeichnisse, in denen man war, und kann mit popd sehr einfach wieder in Verzeichnisse wechseln, die man vorher besucht hatte.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung