Shell++
Wechsel zur Zsh
Interessante Optionen
Die Zsh besitzt einige Optionen, die Sie bei Bedarf mit dem Befehl setopt aktivieren. Soll die Option dauerhaft gelten, tragen sie setopt samt der gewünschten Parameter am besten in die zshrc ein. Dabei lässt sich der Parameternamen mit Groß- oder Kleinbuchstaben eingeben und meist auch durch Unterstriche gliedern. Zsh versteht hier also beispielsweise autocd ebenso wie AUTOCD oder Auto_cd.
Eine Liste aller Optionen finden Sie in der Manpage zshoptions. Eine gesetzte Option deaktivieren Sie wieder, indem Sie dem Parameternamen einfach ein "no" voranstellen: setopt no_Auto_cd oder setopt NOAUTOCD.
Um herauszufinden, welche Optionen gesetzt wurden, reicht ein einfaches setopt ohne Angabe eines Parameters. Zudem unterstützt setopt auch die Vervollständigung mittels [Tab] ("Tab Completion"). Möchten Sie zum Beispiel eine vollständige Liste aller Optionen angezeigt bekommen, drücken Sie nach Eingabe von setopt zweimal die Tabulator-Taste (siehe Abbildung 2). Die wichtigsten der rund 150 Optionen lauten:
AUTO_CD– Ist das erste Wort der Eingabe kein Befehl, so versucht Zsh in ein Verzeichnis dieses Namens zu wechseln. Mithilfe der Tab Completion macht dascdnahezu überflüssig.LIST_PACKED– Die Option verkleinert per Autovervollständigung ausgegebene Listen durch Anpassen des Spaltenabstands.SHARE_HISTORY– Gemeinsame Benutzung der Histories von mehreren Z-Shells; Befehle aus einer anderen laufenden Zsh werden dabei in die eigene History übernommen.GLOB– Die Z-Shell versucht, Muster (zum Beispiel '*') aufzulösen. Bei einemls *ersetzen Sie durch Drücken von [Tab] also die Wildcard durch alle Dateien ersetzen.GLOB_COMPLETE– Normalerweise werden beispielsweise beim Drücken von [Tab] nach einemls *alle Dateien an die Stelle der Wildcard gesetzt. IstGLOB_COMPLETEaktiviert, wählen Sie durch mehrmaliges Drücken von [Tab] die gesuchte Datei aus (siehe auch MENU_COMPLETE).MENU_COMPLETE– Bei der Tab Completion fragt Zsh vor der Ausgabe verschiedener Möglichkeiten nicht mehr nach, sondern fügt sofort den ersten Treffer ein. Bei mehreren Treffern schalten Sie dann die einzelnen Ergebnisse mit [Tab] durch.CORRECT_ALL– Die Zsh versucht falsche Eingaben, wie zum Beispiel einfache Tippfehler, zu korrigieren.HUP– Beim Beenden der Shell wird ein HUP-Signal an die laufenden Prozesse geschickt. Ist diese Option nicht gesetzt, können Prozesse einfach weiter laufen.BEEP– Legt fest, ob die Z-Shell bei einer falschen Eingabe einen Piepston über den PC-Lautsprecher ausgibt.
Globbing
Zu den interessantesten Features der Zsh zählt ihr sehr mächtiges Globbing-System. Der Begriff Globbing leitet sich von der Funktionsweise des Tools glob ab und bezeichnet das Finden von Dateien und Ordnern nach Mustern, zum Beispiel mit Regulären Ausdrücken [2].
Mit dem Befehl setopt EXTENDEDGLOB aktivieren Sie das erweiterte Globbing: Sie können dann beispielsweise auch mit Argumenten wie <x-y> Bereiche von Zahlen auswählen. Zudem lassen sich mit Parametern wie (foo|bar) Argumente gruppieren, mit "**" stoßen Sie eine Rekursion durch den Verzeichnisbaum an:
% chmod 644 ~/public_html/ /*.h↩ tml(.)
Mit zusätzlichen so genannten Qualifiern modifizieren und verfeinern Sie das Suchergebnis. Dazu hängen Sie einen Qualifier nach dem Prinzip Muster(Qualifier) an das Suchmuster an. Möchten Sie etwa prüfen, bei welchen Programme in /usr/bin das SETUID-Bit gesetzt ist, geben Sie dazu den Qualifier "s" an:
ls /usr/bin/*(s)
Eine vollständige Liste der möglichen Qualifier finden Sie in der Manpage zshexpn. Die wohl am häufigsten eingesetzen Qualifier sind:
- "@" – filtert das Ergebnis nach symbolischen Links.
- "w" – gibt nur beschreibbaren Dateien aus.
- "W" – findet nur von allen Usern beschreibbare Dateien.
- "U" – filtert nach eigenen Dateien.
Abbildung 3 demonstriert einige Anwendungsmöglichkeiten für das Zsh-Globbing. Sie können das Ergebnis mit einem vorangestellten "^" negieren. So zeigt ls *(^U) ausschließlich solche Dateien an, die anderen Benutzern gehören.
Haben Sie für Ihre Zsh die Option EXTENDEDGLOB gesetzt, erweist sich der Modifier noglob in manchen Fällen als äußerst hilfreich. Er deaktiviert das Globbing für den darauf folgenden Befehl. So lädt der folgende Befehl nicht etwa die unter der URL vorhandene Seite herunter, sondern verursacht eine Fehlermeldung:
% wget http://www.foobar.de/inde↩x.php?action=test zsh: no matches found: http://ww↩ w.foobar.de/index.php?action=test
Die Zsh interpretiert hier bei aktiviertem Globbing das Fragezeichen als Einleitung für ein Suchmuster. Mangels zu dem vermeintlich folgenden Muster passender Dateien gibt sie eine Fehlermeldung aus.
Setzt Sie aber dem Kommando ein noglob voraus, deaktiviert dies die Expansion nach Dateinamen – der Parameter wird also keiner entsprechenden Expansion unterworfen. Er geht statt dessen "ungefiltert" an wget, das dann die gewünschte Webseite herunterlädt:
% noglob wget http://www.foobar.↩de/index.php?test
--11:41:25-- http://www.foobar.↩
de/index.php?action=test
=> `index.php?action=↩
test'
(…)



