Zsh. Die magische Shell

Ähnliche Dokumente
Zsh. Die magische Shell

Peter Kröner. Einstieg in CSS3. Standards und Struktur. 1. Auflage. Open Source Press

Linux-Einführung Übung

grep kurz & gut John Bambenek and Agnieszka Klus

Datenbankprogrammierung mit MySQL 5 und PHP 5 Spona

Systemverwaltung mittels Skripts

Grundlagen der Informatik Vorlesungsskript

Arbeiten mit der Shell Teil 1

Funktionen in JavaScript

Python 3.6. Erste Schritte auf dem Mac. Syshack. 22. Juni 2017 Version 2.0. Python Erste Schritte auf dem Mac Syshack, 22.

Übungsblatt 1. (Stapel- bzw. Batchbetrieb)

Funktionen in JavaScript

Unix/Linux Grundlagen für Einsteiger

Shell-Scripting Linux-Kurs der Unix-AG

DOKinform PDFprintserver. Dokumentation

Bash-Skripting Linux-Kurs der Unix-AG

15/10/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD! ASP Parallels Client

Linux II. Reguläre Ausdrücke Editoren Scripting. 2 Linux II. Linux I II III Res WN/TT NLTK XML Weka E Reguläre Ausdrücke Editoren Scripting

Shell-Scripting Linux-Kurs der Unix-AG

Bash-Scripting Linux-Kurs der Unix-AG

SelfLinux Was ist eine Shell?

Shell. Oder Konsole suchen im Application Finder. Auch Terminal, Bash oder Kommandozeile genannt. Bash nimmt Befehle entgegen und führt diese aus

A B A S T A R T FAQ. März 2016 / OM. Version 1.0

Arithmetik in der tcsh

Interaktive Whiteboards Software Easiteach unter Apple OS X El Capitan

Spritzgießwerkzeuge kompakt

Basiskonzepte des Rechnerbetriebs

Crashkurs Kommandozeile

Es können mehrere Kommandos in der Kommandozeile eingegeben werden Kommandoverkettung.

Linux und Shell-Programmierung Teil 6

Bash-Skripting Linux-Kurs der Unix-AG

Übersicht Shell-Scripten

Die Shell. Ein Vortrag von Frederik und Michael 1 / 35

Engineering Base. Neue Leistungen in Version 6.0

NoSpamProxy 12.0 Outlook Add-In Gruppenrichtlinien. Protection Encryption Large Files

Unix-Grundkurs 1. Thema heute: Shell-Skripten

Vorbemerkung. Allgemeines zu Shell Scripts. Aufruf. Einfaches Beispiel

DOKinform PDFappender für ELOoffice, ELOprofessional, ELOenterprise (Windows- oder Java Client) Dokumentation

Migration von Windows

Arbeiten in der Unix-Kommandozeile

Arbeiten mit der Shell Teil 1

Das Tablet mit Android 6.x. Kommunikation & Organisation Fotos, Videos & Medien. Markus Krimm. 1. Ausgabe, Juli 2016 ISBN

Neuinstallation von StarMoney 3 für Mac

OSx / MAC. MegaZine3 MZ3-Tool3. Download und Installation. Video 2-1

Initiative Tierwohl. Einrichtung des FTP-Zugangs zur Clearingstelle. In 5 Schritten zum sicheren FTP-Zugang. Version

Grundlagen der Programmierung

Word 10. Verweise: Textmarken, Hyperlinks, Querverweise Version: Relevant für:

Arbeiten in der Unix-Kommandozeile

Leitfaden für die Installation der freien Virtual Machine. C-MOR Videoüberwachung auf einem VMware ESX Server

Proseminar. C-Programmierung Grundlagen und Konzepte. Der Präprozessor. von: Svenja Neef

Migration von Windows

SharePoint für Site Owner. Benjamin S. Bergfort. 1. Ausgabe, 1. Aktualisierung, November 2014 ISBN: SHPSO2013

Perl Programmierung Grundlagen

Schnell und sicher im Internet arbeiten. mit dem Internet Explorer 8 INT-IE8. Autor: Peter Wies. Inhaltliches Lektorat: Charlotte von Braunschweig

Dokumentation QuickHMI Runtime Manager

Darüber hinaus bietet SQuirreL eine Vielzahl von Plug-ins, mit denen der Funktionsumfang des Programms erheblich erweitert werden kann.

registra Schnittstelle

Erstellung eines Prototyps zum sicheren und gesteuerten Zugriff auf Dateien und Dokumente auf Basis von Lotus Domino und Notes

Dokumentation QuickHMI Dateisystem-Datenquelle

Benutzung der Manpage, Shell Teil 3

Word 10. Verweise Version: Relevant für: IKA, DA

Linux Kommandozeile: Einfache Skripte. 1 Wiederhohlung. 2 Einfache Skripte

Initiative Tierwohl Geflügel

GTR Programm: Lexikon

Vorsemesterkurs Informatik

Das Handbuch zu KCron

DIN EN ISO 9001 : 2015 UMSETZEN. Pocket Power ANNI KOUBEK. Herausgegeben von Gerd F. Kamiske

{tip4u://094} Passwort ändern

1.1 Datenbankprogramm Oracle für MCIS MDA

Effektiver Umstieg auf Microsoft Office Word Impressum. Effektiver Umstieg auf Microsoft Office Word Autor: Thomas Alker, Konrad Stulle

RELEASE 5 Lotus Notes als Datenquelle

Einführung. Funktionsweise. Inhalt. OpenJUMP Communication Plugin. OpenJUMP nach Fremdanwendung

Leitfaden für die Installation von C-MOR auf einer freien Virtual Machine Experten Installation mit eigener Partitionierung

Formulare. Textverarbeitung Professionell 71

Dateisystem 2, RegEx, Manpages

JUNG Facility-Pilot Visualisierungs-Server Version 2.2

Programmieren mit dem TI-92

Initiative Tierwohl - Schwein

STARFACE MS Outlook Connector 2.0

Arbeiten mit der Shell Teil 1

Variablen in MATLAB. Unterschiede zur Mathematik: Symbolisches und numerisches Rechnen. Skriptdateien. for-schleifen.

Das Handbuch zu KReversi. Clay Pradarits Entwickler: Mario Weilguni Korrektur: Lauri Watts Deutsche Übersetzung: Maren Pakura

HTML5, JavaScript und jquery

Linux Treiber Installation Hochschule Reutlingen

Transkript:

Plenz Guckes: Zsh

Julius Plenz Sven Guckes Zsh Die magische Shell

Alle in diesem Buch enthaltenen Programme, Darstellungen und Informationen wurden nach bestem Wissen erstellt. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grunde sind die in dem vorliegenden Buch enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor(en), Herausgeber, Übersetzer und Verlag übernehmen infolgedessen keine Verantwortung und werden keine daraus folgende Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen oder Teilen davon entsteht, auch nicht für die Verletzung von Patentrechten, die daraus resultieren können. Ebenso wenig übernehmen Autor(en) und Verlag die Gewähr dafür, dass die beschriebenen Verfahren usw. frei von Schutzrechten Dritter sind. Die in diesem Werk wiedergegebenen Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. werden ohne Gewährleistung der freien Verwendbarkeit benutzt und können auch ohne besondere Kennzeichnung eingetragene Marken oder Warenzeichen sein und als solche den gesetzlichen Bestimmungen unterliegen. Dieses Werk ist urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdrucks und der Vervielfältigung des Buches oder Teilen daraus vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlags in irgendeiner Form (Druck, Fotokopie, Mikrofilm oder einem anderen Verfahren), auch nicht für Zwecke der Unterrichtsgestaltung, reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. Bibliografische Information Der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. Copyright 2008 Open Source Press, München Gesamtlektorat: Dr. Markus Wirtz Satz: Open Source Press (LATEX) Umschlaggestaltung: FritzDesign, Erlangen ISBN der Print-Ausgabe: 978-3-937514-59-8 ISBN (E-Book, PDF) 978-3-941841-32-1 http://www.opensourcepress.de

Inhaltsverzeichnis Vorwort 11 1 Einleitung 15 1.1 Installation, Versionen und UTF-8................. 15 1.2 Wichtige Fachbegriffe......................... 16 1.3 Spezielle Zeichen und Quoting.................... 17 1.4 Tab-Vervollständigung......................... 18 1.5 Der erste Start der Z-Shell...................... 18 1.5.1 Z-Shell als Standard-Shell.................. 19 1.6 Wie die Z-Shell konfiguriert wird.................. 20 1.6.1 Shell-Optionen......................... 20 1.6.2 Umgebungsvariablen..................... 21 1.6.3 Einstellungen permanent speichern............ 21 1.6.4 Die Konfiguration portabel halten............. 24 1.6.5 Aus Konfigurationsdateien lernen.............. 25 1.7 Das Prompt............................... 25 1.7.1 Prompt konfigurieren..................... 26 1.7.2 Prompt an der rechten Seite des Terminals........ 31 1.7.3 Vorkonfigurierte Prompts: promptinit........... 31 1.7.4 Weitere Prompts........................ 32 1.7.5 Optionen............................ 33 2 Kommandos schneller eingeben 35 2.1 Aliase................................... 35 2.1.1 Dateien anzeigen: ls...................... 37 2.1.2 Suffix-Aliase........................... 38 5

Inhaltsverzeichnis 2.1.3 Globale Aliase......................... 38 2.2 Funktionen............................... 40 2.2.1 Bereits definierte Funktionen anzeigen und ändern... 40 2.2.2 Auf Argumente zugreifen................... 40 2.2.3 Wie Argumente übergeben werden............. 41 2.2.4 Einzeilige Funktionen: Erweiterte Aliase........ 42 2.2.5 Mehrere Namen: Über welchen wurde die Funktion aufgerufen?........................... 42 2.2.6 Der Rückgabewert....................... 43 2.2.7 Hilfe innerhalb von Funktionen............... 43 2.2.8 Spezielle Funktionen..................... 44 2.2.9 Funktionen in Dateien auslagern und automatisch laden 45 2.2.10 Lokale Optionen........................ 46 2.2.11 Funktionen in Bytecode kompilieren............ 47 2.3 Expansion................................ 47 2.3.1 Brace Expansion........................ 48 2.3.2 Dateinamen-Expansion.................... 50 2.3.3 Kommandosubstitution.................... 52 2.3.4 Substitution arithmetischer Ausdrücke.......... 53 2.3.5 Prozess-Substitution...................... 53 3 Dateien, Ausgaben und Programmaufrufe 57 3.1 Globbing................................. 57 3.1.1 Einfaches Globbing...................... 58 3.1.2 Erweitertes Globbing..................... 63 3.1.3 Globbing-Einstellungen ändern: Flags........... 66 3.1.4 Auswahlkriterien: Qualifier.................. 68 3.1.5 Beispiele aus man zsh-lovers................ 76 3.1.6 Musterüberprüfung...................... 77 3.2 Ein- und Ausgabeumleitung..................... 78 3.2.1 Kommandos verknüpfen: Pipe................ 78 3.2.2 Ausgabe in eine Datei umleiten............... 79 3.2.3 Fehlermeldungen in eine Datei umleiten......... 81 3.2.4 Eingabe umleiten....................... 82 6

Inhaltsverzeichnis 3.2.5 Umleitung in mehrere Dateien: multios.......... 83 3.2.6 Ausgabe zur interaktiven Verwendung speichern.... 84 3.3 Unterprozesse: Kommandos parallel laufen lassen........ 85 3.3.1 Tabelle aller kontrollierten Prozesse............ 86 3.3.2 Kommandos nicht als Unterprozesse der Shell starten. 87 3.3.3 Prozesse am Ende einer Sitzung entkoppeln....... 88 3.3.4 Kommandos in einer Subshell ausführen......... 89 4 Die Z-Shell interaktiv verwenden 91 4.1 Tastenkürzel und der Z Line Editor................. 91 4.1.1 vi oder emacs.......................... 91 4.1.2 bindkey und Widgets: Tastenkürzel anzeigen und ändern 95 4.1.3 Parameter, Aliase und Funktionen editieren....... 96 4.2 Die History............................... 97 4.2.1 Konfiguration.......................... 97 4.2.2 Befehle mit fc aus der History holen............ 100 4.2.3 Interaktive Expansion..................... 103 4.3 Automatische Vervollständigung.................. 108 4.3.1 Voraussetzungen........................ 108 4.3.2 Wenn mehrere Treffer auftreten............... 109 4.3.3 Andere Vervollständigungen................. 110 4.3.4 Die Mechanismen....................... 112 4.3.5 Konfiguration durch zstyle.................. 113 4.3.6 Die Syntax von zstyle..................... 119 4.3.7 Die Wahl des Completers................... 123 4.3.8 Completion bei bestimmten Programmen anpassen.. 126 4.3.9 Shell-Optionen......................... 130 4.3.10 Tastenkombinationen..................... 131 5 Skripting: Kontrollstrukturen und Variablen 133 5.1 Kontrollstrukturen: Schleifen und if-abfragen.......... 134 5.1.1 Bedingungen aufstellen: if-abfragen............ 134 5.1.2 case-statement......................... 138 5.1.3 Schleifen: Befehle mehrmals wiederholen......... 139 7

Inhaltsverzeichnis 5.2 Parameter: Variablen und Arrays.................. 143 5.2.1 Gültigkeitsbereich von Variablen.............. 144 5.2.2 Arrays.............................. 144 5.2.3 Arrays auf Zeichenketten abbilden und umgekehrt... 148 5.2.4 Assoziative Arrays....................... 149 5.3 Parameter Expansion......................... 151 6 Widgets und Completions selbst erstellen 159 6.1 ZLE-Widgets erstellen......................... 159 6.1.1 Parameter innerhalb von Widgets.............. 160 6.1.2 Vordefinierte Widgets aufrufen............... 161 6.1.3 Leertaste neu belegen..................... 161 6.1.4 Vordefinierte Widgets modifizieren............. 162 6.2 Eigene Completions schreiben.................... 163 6.2.1 Treffer zu einer Liste hinzufügen: compadd........ 163 6.2.2 Hilfsfunktionen......................... 164 6.2.3 Completion-Funktionen in Dateien auslagern...... 174 6.2.4 Konnte etwas vervollständigt werden?........... 175 6.2.5 Variablen mit besonderer Bedeutung........... 176 6.2.6 Hilfsfunktionen, die Treffer zur Verfügung stellen.... 177 6.2.7 Typischer Aufbau einer Completion-Funktion...... 177 6.2.8 Selbst geschriebene Completions an die Entwickler senden................................ 180 Anhang 181 A Hilfe finden 183 A.1 Wie liest man die Manpage?..................... 184 A.1.1 Die verschiedenen Sektionen................ 184 A.1.2 Pager: less............................ 185 A.1.3 Manpages online........................ 187 A.2 Community............................... 187 A.2.1 Mailingliste........................... 188 A.2.2 IRC-Kanal............................ 188 A.2.3 Wiki............................... 189 8

Inhaltsverzeichnis A.2.4 Webseiten............................ 189 B compctl das alte Completion-System 191 B.1 Dateien nach Muster vervollständigen............... 194 B.2 Beliebige Vervollständigungen definieren............. 195 B.3 Erweiterter Modus........................... 196 Index 201 9

Das Glück der Erkennenden mehrt die Schönheit der Welt und macht alles, was da ist, sonniger. Friedrich Nietzsche

Vorwort Nichts ist falsch an der Shell, die ich gerade benutze, ich vermisse nichts; sie tut genau das, was ich will. Warum also die Z-Shell?! So oder ähnlich lautet meist die Reaktion, empfiehlt man den Einsatz der Z-Shell. Dabei gibt es viele Gründe, die für die Z-Shell sprechen. Sie kann bei Bedarf die Bourne Shell, C-Shell oder Korn-Shell nahezu originalgetreu emulieren, bietet darüber hinaus aber in fast allen Bereichen die beste Komposition aller Features der genannten Shells jeweils noch einmal wesentlich verbessert. Für Z-Shell-Liebhaber gilt darum die Formel: zsh= (bash+ksh+t csh) 2 Nicht nur ist die Z-Shell, genau wie die bereits erwähnten Shells, freie Software, sie wird auch aktiv weiterentwickelt, von Entwicklern, die schon sehr lange Unix-Systeme nutzen und außerdem den regen Kontakt zu Nutzern pflegen. Zudem ist sie gut dokumentiert und besitzt eine aktive (wenn auch kleine) Fangemeinde. Dieses Buch richtet sich daher an Leser, die bereits ein wenig Erfahrung mit Shells gesammelt haben (sei es nun die Z-Shell oder andere Shells, wie beispielsweise die Bash), die aber noch wesentlich weiter in die Welt der Shells eintauchen wollen. Es ist besonders interessant für diejenigen, die die Interaktivität von Shells schätzen sowie ein Interesse daran haben, täglich auftretende Aufgabe zu automatisieren. Grundlegenden Konzepte von Shells, Unix oder deren Derivaten werden nicht erklärt, da wir davon ausgehen, dass der Leser sich im Umfeld von Shells schon ein wenig zurecht findet. Ihre Kenntnisse sollten also über das bloße Abtippen von Befehlen aus Anleitungen hinaus gehen. Auch auf betriebssystemspezifische Ausnahmen wird nicht eingegangen, da die Z- Shell so portabel und architekturunspezifisch programmiert ist, dass sie auf so gut wie jedem modernen Unix-System läuft. Die Portabilität von Programmen ist deswegen so wichtig, weil es dadurch möglich wird, einmal erworbenes Wissen auf ein anderes System mitzunehmen und darauf anzuwenden. Damit ist die Z-Shell nicht ein Teil eines bestimmten Betriebssystems, sondern ein konzeptioneller Bestandteil der Arbeit auf vielen Systemen. 11

Vorwort Die Struktur des Buches Das 1. Kapitel dieses Buches erläutert, wie die Z-Shell konfiguriert wird und wie man die Darstellung in der Z-Shell anpasst (namentlich das Prompt). Im 2. Kapitel wird darauf eingegangen, wie man täglich auftretende Arbeitsschritte durch Aliase oder Funktionen abkürzen und sich viel Tipparbeit durch Expansionsausdrücke ersparen kann. Kapitel 3 beschäftigt sich damit, wie die Z-Shell Dateinamen nach einem Muster erzeugt (Globbing ), wie die Weiterleitung von Ausgaben funktioniert und wie man mehrere Programme aus einer Shell startet und trotzdem den Überblick behält. Im 4. Kapitel wird es richtig interessant, denn hier wird erläutert, wie man die interaktiven Stärken der Z-Shell voll ausreizt: Welche Tastenkürzel sind bereits vordefiniert? Wie kann man diese ändern? Wie greift man auf bereits eingegebene Zeilen zu (History)? Und vor allem: Wie nutzt und konfiguriert man die sehr mächtige automatische Vervollständigung (Completion) der Z-Shell? Das 5. Kapitel beschäftigt sich mit den Grundlagen des Skripting: Was sind Variablen und Arrays, wie greift man auf sie zu und wie ändert man sie? Auch wird dort auch auf Kontrollstrukturen wie und Ð, ÓÖ und Û Ð eingegangen, mit denen der Programmfluss innerhalb eines Skriptes gesteuert wird. Das 6. Kapitel führt schließlich in die Entwicklung eigener Completion- Funktionen und Tasten-Makros ein. Webseite: Tipps und Tricks, Errata und Feedback Unter http://zshbuch.org/ gibt es eine Webseite zu diesem Buch. Dort finden sich die von den Autoren genutzten Konfigurationsdateien, eine Liste mit den sicher hier und da notwendigen Korrekturen zu diesem Buch, weitere Links zu nützlichen Webseiten, sowie eine Sammlung von Tipps und Tricks, die auch von Ihnen erweitert werden kann. Bitte geben Sie uns dort auch Feedback! Was gefällt, was nicht und was müsste noch erwähnt werden? Wir freuen uns auf viele Rückmeldungen! Typografische Konventionen Da sich dieses Buch mit einem Programm beschäftigt, das lediglich textbasiert zu bedienen ist, tauchen häufig Zeichenketten auf, die vom Nutzer eingegeben oder von der Z-Shell ausgegeben werden. Diese werden in 12

Vorwort einer Ò ØÔÖÓÔÓÖØ ÓÒ Ð Ò Ë Ö Ø dargestellt; jede Eingabe, die über die Tastatur erfolgt auch Tastenkombinationen (abgesehen von den Cursortasten) wird explizit erwähnt und fett dargestellt. Sofern es sich um eine interaktive Eingabe handelt, wird dem Befehl immer ein Prompt (Eingabeaufforderung) vorangestellt, in diesem Buch: zsh: % Jedes so eingegebene Kommando wird mit Druck auf die Enter-Taste abgeschlossen, in Fällen, wo dies nicht auf den ersten Blick ersichtlich ist, wird dies mit' eigens angezeigt. Tastenkombinationen, deren Tasten gleichzeitig gedrückt werden müssen, werden mit einem + verbunden: [Strg]+[c], während Tasten, die direkt hintereinander zu betätigen sind, auch hintereinander geschrieben werden: [Strg]+[x][h]. Neu eingeführte Fachbegriffe werden meist kursiv, Kommandos, Optionen und Manpages immer Ò ØÔÖÓÔÓÖØ ÓÒ Ð gesetzt. Sofern ein Leerzeichen besonders wichtig ist, wird es durch sichtbar gemacht; in Codebeispielen, in denen wegen der zu großen Zeilenlänge ein Umbruch erfolgen muss, wird die Zeile mit einem Backslash ( ) abgeschlossen. Diese Codebeispiele können Sie genau so abtippen, da dies auch von der Z-Shell als Weiterführung der Zeile erkannt wird. Dank Wir danken Matthias Kopfermann, dem Z-Shell Liebhaber, Klaus Knopper für die Aufnahme der Z-Shell in sein Linux-Live-System Knoppix, Michael Prokop für das neue Zuhause der Z-Shell auf seinem Live-System grml sowie Felix von Leitner für seinen Z-Shell-Setup an der FU Berlin. Danke auch an Jens Kubieziel und Christian Schneider aus der Z-Shell Community, insbesondere Frank Terbeck und Michael Prokop, die uns beim Schreiben und in vielen technischen Dingen geholfen haben, sowie an unsere Lektoren Patricia Jung und Sacha Storz für ihre Mühen! Auch gebührt Dank denjenigen, die die Entwicklung und Verbreitung der Z-Shell maßgeblich vorangetrieben haben: Jerry Peek, Bart Schaefer, Peter W. Stephenson und Sven Wischnowsky sowie allen Maintainern der Dienste, Dokumentation und Domains rund um die Z-Shell. Unser ganz besonderer Dank gilt unseren Eltern, die uns stets gefördert und unterstützt haben. Julius Plenz und Sven Guckes September 2008 13

1 Kapitel Einleitung 1.1 Installation, Versionen und UTF 8 Sofern Ihre Distribution die Z-Shell nicht als vorbereitetes Paket anbietet, können Sie sich den Quellcode vom FTP-Server der Freien Universität Berlin herunterladen. 1 Zum Zeitpunkt der Drucklegung dieses Buches ist die Z-Shell in der Version º º aktuell. Alle Beispiele beziehen sich also auf diese Version. Genau wie in anderen Projekten im Open-Source-Bereich bezieht sich die zweite Ziffer der Versionsnummer auch auf die Stabilität des Programms: So zeigen gerade Ziffern an, dass es sich um eine Version handelt, die vermutlich keine Fehler aufweist, während eine ungerade Ziffer signalisiert: Dies ist eine Entwicklerversion. Dennoch empfiehlt es sich, immer die aktuellste Z- Shell zu verwenden, da den stabilen Versionen häufig Neuerungen fehlen, die in der Entwicklerversion bereits vorhanden sind. 1 ØÔº Ù¹ ÖÐ Òº die Z-Shell finden Sie im Verzeichnis»ÔÙ»ÙÒ Ü» Ðл޻. 15

1 Einleitung Erst seit der Version º unterstützt die Z-Shell die 8-Bit-Kodierung von Unicode-Zeichen (UTF-8). Sofern Sie also auf einem System arbeiten, das UTF-8 verwendet, so haben Sie in neuen Versionen der Z-Shell kein Problem mehr, sofern Ihre Lokalen richtig eingestellt sind (Ä ÄÄ), Ihr Terminal-Emulator UTF-8-fähig ist und Sie einen Unicode-Zeichensatz verwenden. 1.2 Wichtige Fachbegriffe Zum besseren Verständnis hier ein kleines Glossar mit wichtigen Fachbgriffen, die im Buch immer wieder auftauchen werden: Variablen bzw. Parameter Variablen, auch Parameter genannt, sind Datenspeicher. Unter einem (fast) beliebigen Namen können Informationen wie Ziffern, Zahlen oder Zeichenketten gespeichert werden. Die Zuweisung einer Variablen erfolgt per Ò Ñ Û ÖØ. Per ÙÒ Ø Ò Ñ wird die Variable Ò Ñ gelöscht. Auf den Inhalt der Variablen wird zugegriffen, indem dem Namen ein Dollar-Zeichen vorangestellt wird. In einigen Fällen wird auch per ßÒ Ñ Ð auf eine Variable zugegriffen, was gleichbedeutend ist. Vertiefende Informationen finden sich Abschnitt 5.2. Optionen Optionen bestimmen das Verhalten der Z-Shell. In fast jedem Kapitel werden die wichtigsten der für das Thema relevanten Optionen besprochen. Wie Optionen gesetzt werden und welche standardmäßig gesetzt sein sollten, wird auf den nächsten Seiten erläutert. Builtins, Aliase, Funktionen Builtins entsprechen Programmen, die sich in È ÌÀ finden, mit dem einzigen Unterschied, dass sie in die Z-Shell eingebaut (engl. builtin ), also nicht in einer eigenen Datei abgelegt sind. Aliase und Funktionen verhalten sich wie Builtins, sind aber Codefragmente, die kleine Aufgaben übernehmen. Abschnitt 2.1 geht näher auf Aliase und Funktionen ein. Prompt Das Prompt (Eingabeaufforderung ) wird vor jedem Befehl angezeigt. In diesem Buch wird durchgehend das Prompt Þ ± verwendet. Mehr Informationen in Abschnitt 1.7. Wörter Ein Wort ist definiert als eine Zeichenkette aus Buchstaben, Zahlen sowie den in der Variable ÏÇÊ À ÊË aufgeführten Zeichen. Das aktuelle Wort bezieht sich meist auf das Wort auf dem der Cursor steht, 16

1.3 Spezielle Zeichen und Quoting in manchen Fällen auch das nächste Wort nach der aktuellen Cursorposition. Argument Argumente sind Werte, die einem Programm oder einer Funktion etc. übergeben werden, um deren Verhalten zu steuern. Rückgabewert Jedes Kommando, das auf einem Unix-System aufgerufen wird, liefert dem aufrufenden Programm (hier meist die Z-Shell) einen Rückgabewert, sobald es sich beendet. Ist dieser Rückgabewert null, so hat das Kommando seine Aufgabe erfolgreich erfüllt sich also erfolgreich beendet. Weicht der Wert von null ab, so ist ein Fehler aufgetreten, der (oftmals) anhand des zurückgegebenen Wertes identifiziert werden kann. Treffer Treffer bezeichnen Dateinamen oder Argumente, die auf ein definiertes oder vom Nutzer eingegebenes Muster passen. 1.3 Spezielle Zeichen und Quoting Eine ganze Reihe von nicht alphanumerischen Zeichen ist in der Z-Shell mit einer besonderen Bedeutung belegt, und zwar,,,,,,,,,, µ, ß, Ð,,,,,, ³,, ² sowie das Leerzeichen. Sofern diese Zeichen als Argument an ein Programm weitergegeben werden sollen, so muss diese spezielle Bedeutung für die Z-Shell aufgehoben werden, und zwar über das Schützen oder Quoten (von engl. to quote als in Anführungszeichen setzen ). Einzelne Zeichen werden geschützt, indem ihnen ein Backslash ( ) vorangestellt wird. Mehrere spezielle Zeichen werden in Anführungszeichen eingefasst. Dabei gibt es zwei verschiedene Arten von Anführungszeichen: einfache und doppelte. Erstere bewirken, dass der zwischen ihnen eingeschlossene Inhalt exakt in dieser Form eingefügt wird. Doppelte Anführungszeichen lassen hingegen zu, dass zum Beispiel Variablenwerte expandiert werden. Innerhalb von Anführungszeichen fügt ein durch einen vorangestellten Backslash geschütztes Anführungszeichen auch ein wirkliches Anführungszeichen ein. Anführungszeichen dürfen auch mitten in einer Zeichenkette auftreten, um Teile dieser zu schützen. Ein paar Beispiele (die Ausgabe ist jeweils das, was die Z-Shell an die Programme weitergibt): zsh: % var=wert zsh: % print "${var}voll" Wertvoll 17

1 Einleitung zsh: % print '${var}voll' ${var}voll zsh: % print "${var}"voll'!' Wertvoll! zsh: % print \$\{var\}voll\! ${var}voll! Sie müssen sich übrigens keine Gedanken über eventuelle Leerzeichen in Variablen machen. Im Gegensatz zu den meisten anderen Shells teilt die Z-Shell eine Variable anhand der Leerzeichen nur dann auf, wenn dies explizit gewünscht ist. 2 Wurde die Variable per Ò Ø ºØÜØ gesetzt, so schlägt das Kommando ÑÚ»ØÑÔ nicht wie in anderen Shells fehl, sondern verschiebt die Datei nach»øñô. In der Bash würde zu zwei Argumenten expandiert: ÑÚ würde versuchen, die Dateien Ò und Ø ºØÜØ nach»øñô zu verschieben, was man nur umgehen kann, indem man in Anführungszeichen setzt. 1.4 Tab Vervollständigung Eine der wesentlichen Stärken der Z-Shell ist die Tab-Completion (Vervollständigung per [Tab]), die viel weiter entwickelt ist als in anderen Shells (wie beispielsweise der Bash). Diesem Thema ist auch ein nicht unerheblicher Teil des Buches gewidmet, da die Konfigurationsmöglichkeiten sehr umfangreich sind. Grundsätzlich gilt: Die Completion liefert mir, wenn ich [Tab] drücke, genau das, was ich brauche. Wird, nachdem der Beginn eines Wortes angegeben wurde, einmal [Tab] gedrückt, so listet die Z-Shell alle Möglichkeiten auf, wie sie das bisher Eingegebene vervollständigen könnte. Im Gegensatz zu vielen anderen Shells können dies nicht nur Dateinamen sein, sondern beliebige, von Programm zu Programm unterschiedliche Zeichenketten (zum Beispiel Rechnernamen, Optionen oder Unterkommandos). Wird [Tab] einmal gedrückt, so werden diese Möglichkeiten lediglich aufgelistet. Wird die Taste zum zweiten Mal betätigt, so fügt die Z-Shell den ersten angezeigten Treffer ein. Wiederholtes Drücken springt zu den jeweils nächsten Treffern. [Enter] führt das Kommando aus, ein Leerzeichen beendet die Auswahl (wobei die Treffer weiterhin angezeigt werden). 1.5 Der erste Start der Z Shell Wird die Z-Shell zum ersten Mal gestartet, so ist dies wenig spektakulär. Sofern schon eine Konfigurationsdatei ºÞ Ö (auf die ab S. 20 eingegangen 2 Das geschieht per ß Ú Ö Ð oder ß ÞµÚ Ö Ð, siehe auch Abschnitt 5.3 auf S. 156. 18

1.5 Der erste Start der Z Shell wird) im Home-Verzeichnis des Nutzers liegt, 3 wird lediglich ein Prompt angezeigt: Der Name des Rechners, gefolgt von einem Prozentzeichen. Falls aber keine solche Konfiguration existiert, startet die Z-Shell ein Programm, das einem neuen Nutzer beim Einstieg behilflich sein soll. Dieses Programm ist leider durchgehend in Englisch gehalten und nimmt dem Nutzer bisweilen herzlich wenig Arbeit ab, da die Fragen teilweise tiefer gehende Kenntnisse der Z-Shell-Termini voraussetzen. Daher sei empfohlen, das Programm sofort durch die Eingabe [0] (Null) zu beenden. Dann wird lediglich eine Konfigurationsdatei erstellt, die nur einen Kommentar enthält. Wollen Sie das Programm manuell starten, dann geben Sie ÙØÓÐÓ Þ ¹Ò ÛÙ Ö¹ Ò Ø ÐÐ ²² Þ ¹Ò ÛÙ Ö¹ Ò Ø ÐÐ ¹ ein (Ihre alte Konfigurationsdatei wird dann überschrieben!). Die Z-Shell können Sie jederzeit beenden, indem Sie Ü Ø eingeben oder auf einer leeren Eingabezeile [Strg]+[d] drücken. Sofern Sie eine ungewollte Aktion gestartet haben beispielsweise ein Kommando, das den Computer besonders stark auslastet, können Sie dieses jederzeit mit [Strg]+[c] beenden. 1.5.1 Z Shell als Standard Shell In der Datei» Ø»Ô Û wird festgelegt, welche Shell gestartet wird, wenn sich ein Nutzer einloggt (normalerweise ist dies» Ò» ). Wollen Sie die Z-Shell künftig als Standard-Shell verwenden, führen Sie das Kommando (change shell) aus es wird Sie nach Ihrem Nutzer-Passwort fragen sowie nach der Shell, die Sie von nun an verwenden möchten. Tragen Sie dort» Ò»Þ ein, dann wird jedes Mal, wenn Sie ein neues Terminal ausführen etc., eine Z-Shell gestartet. Sollte das Programm Ihnen mitteilen, dass» Ò»Þ keine gültige Shell sei, gibt es zwei Möglichkeiten, die Z-Shell trotzdem zur Standard- Shell zu machen. Einerseits ist es möglich, dass die Z-Shell unter einem anderen Pfad auf dem System installiert ist. Um dies herauszufinden, geben Sie auf einer beliebigen Shell das Kommando Û Þ ein; sofern die Z-Shell installiert ist, listet dieses Programm auf, wo sich die ausführbare Datei befindet. Dann überprüfen Sie, ob diesen Pfad als Shell annimmt. Wenn sich immer noch weigert, liegt dies vermutlich daran, dass die Z-Shell nicht zu den erlaubten Shells auf Ihrem System gehört. Alle erlaubten Shells werden in der Datei» Ø» ÐÐ gespeichert. Wenn dort also 3 Dies kann dann der Fall sein, wenn in» Ø» л bereits von der Distribution eine Datei ºÞ Ö erstellt wurde. In» Ø» л (für engl. skeleton, Skelett ) liegen minimale Konfigurationsdateien, die in das Home-Verzeichnis jedes neu erstellten Nutzers kopiert werden. 19

1 Einleitung kein Eintrag der Z-Shell vorhanden ist, dann können Sie sich behelfen, indem Sie die Datei mit einem Editor öffnen und die Zeile» Ò»Þ ans Ende hinzufügen (dies setzt natürlich voraus, dass Sie auf dem System Root- Rechte besitzen). Wenn Sie diese Datei aber nicht editieren können, dann müssen Sie sich mit einem Trick behelfen: Davon ausgehend, dass Sie bisher die Bash benutzt haben, schreiben Sie einfach die Zeile Ü Þ in die erste Zeile der Datei»º Ö und die Bash wird sich nach dem Start sofort wieder beenden und stattdessen eine Z-Shell starten. 1.6 Wie die Z Shell konfiguriert wird Die Z-Shell wird konfiguriert, indem der Nutzer Shell-Optionen oder Variablen setzt und eingebaute Programme, Funktionen oder Builtins aufruft, die das Verhalten der Z-Shell beeinflussen. 1.6.1 Shell Optionen Die Z-Shell besitzt aktuell 166 sog. Shell-Optionen, die ihr generelles Verhalten in bestimmten Situationen steuern. Diese Optionen können nur entweder an- oder ausgeschaltet werden. Dies geschieht durch das Kommando ØÓÔØ. Wird es ohne Argumente aufgerufen, werden alle von der Standardeinstellung abweichenden Optionen angezeigt. Die Z-Shell erlaubt zu jedem Optionsnamen jede Kombination von Großund Kleinschreibung, z. B. ÓÔØ ÓÒ, ÇÈÌÁÇÆ, ÇÔØ ÓÒ und ÓÈÌÁÇÆ. Zusätzliche Unterstriche sind ebenfalls erlaubt. In der Manpage Þ ÓÔØ ÓÒ werden die Namen daher durch Unterstriche sinnvoll unterteilt. Diese Aufteilung wird auch innerhalb des Buches eingehalten, so dass in der Manpage direkt nach den angegebenen Optionsnamen gesucht werden kann. Die folgenden beiden Kommandos setzen also dieselbe Option, ÔÙ ÒÓÖ ÙÔ : zsh: % setopt pushdignoredups zsh: % setopt Pu_shDI gno_redups Um den Effekt einer Option zu negieren, wird dem Namen ein ÒÓ vorangestellt. Um die beiden obigen Kommandos also rückgängig zu machen, würde folgendes Kommando ausreichen: zsh: % setopt no_pushd_ignore_dups 20

1.6 Wie die Z Shell konfiguriert wird 1.6.2 Umgebungsvariablen Im Gegensatz zu den wenigen Optionen gibt es nahezu unbegrenzt viele Umgebungsvariablen. Konvention ist, dass Variablen, über die die Z-Shell konfiguriert werden kann, komplett in Großbuchstaben geschrieben werden. Eine solche Variable, z. B. ÄÇ À Ã, setzt man wie folgt: zsh: % LOGCHECK=10 Umgebungsvariablen sind aber nicht nur für die Shell von Bedeutung, sondern enthalten häufig auch Informationen für aufgerufene Programme. Sollen solche Umgebungsvariablen auch in Programmen verfügbar sein, die aus der Shell gestartet wurden, dann müssen sie exportiert werden: zsh: % export EDITOR=vim So kann jedes aus dieser Shell aufgerufene Programm auf den Inhalt von ÁÌÇÊ zugreifen. Das Programm ÒÚ zeigt alle Umgebungsvariablen an, die gesetzt und exportiert sind. In der Manpage Þ Ô Ö Ñ wird im Abschnitt Parameters used by the Shell erklärt, welche Variablen wie verwendet bzw. interpretiert werden. 1.6.3 Einstellungen permanent speichern Die Z-Shell verhält sich wie andere Shells und textbasierte Unix-Programme meist auch so, dass Einstellungen, die zur Laufzeit getätigt werden (Variablen, Optionen, Funktionen etc.), nur für genau die verwendete Instanz der Z-Shell gelten und nicht gespeichert werden, also beim Beenden der Z-Shell verloren gehen. Dies ist insofern praktisch, als eine Konfiguration erst einmal getestet und, sofern das neue Verhalten nicht überzeugt, durch Beenden der Shell auch schnell wieder verworfen werden kann. Möchte man hingegen eine Einstellung oder Funktion für alle zukünftigen Instanzen der Z-Shell bereitstellen, so muss das zugehörige Kommando in eines der sogenannten Startup-Files eingetragen werden, also eine Datei, die beim Start eingelesen und ausgeführt wird. Für verschiedene Anwendungsbereiche gibt es verschiedene solcher Dateien. In der nachfolgenden Tabelle sind alle in der Reihenfolge, in der sie eingelesen werden, aufgelistet: 21