Zsh. Die magische Shell



Ähnliche Dokumente
Einzel- s und unpersönliche Massen-Mails versenden

Anleitung zur Verwendung der VVW-Word-Vorlagen

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Mit freundlicher Unterstützung von: Die Tipps der Millionäre

BEDIENUNG ABADISCOVER

Anleitung über den Umgang mit Schildern

Gelassenheit gewinnen 30 Bilder für ein starkes Selbst

Über die Herausgeber

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

4.1 Wie bediene ich das Webportal?

Zsh. Die magische Shell

Stammdatenanlage über den Einrichtungsassistenten

Informationen zum neuen Studmail häufige Fragen

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen

Dokumentation QuickHMI Runtime Manager

Copyright (C) Open Source Press

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003

Zwischenablage (Bilder, Texte,...)

Audiospektrum- Analyse mit Mikrocontrollern

Wie halte ich Ordnung auf meiner Festplatte?

Anzeige von eingescannten Rechnungen

SF-RB. Zeit- und Aufgabenmanagement. SF-Software Touristiksoftware

AutoTexte und AutoKorrektur unter Outlook verwenden

Windows Server 2012 RC2 konfigurieren

Rüdiger Zarnekow Lutz Kolbe. Green IT. Erkenntnisse und Best Practices aus Fallstudien

Doku zur Gebäudebrüter Datenbank

Erstellen von x-y-diagrammen in OpenOffice.calc

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Freischalten von e-versions und Encodern

Arbeitsblätter. Sinnvolle Finanzberichte. Seite 19

Einführung in TexMaker

A B A S T A R T Kurz-Anleitung

Programme im Griff Was bringt Ihnen dieses Kapitel?


Dokumentenverwaltung. Copyright 2012 cobra computer s brainware GmbH

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Kurzdokumentation ALB Land-Data Eurosoft GmbH & Co.KG Rennbahnstr Pfarrkirchen

Professionelle Seminare im Bereich MS-Office

Im Rahmen seiner Beratertätigkeit veröffentlicht er Artikel und hält Vorträge und Schulungen zu diesen und weiteren Themen.

GITS Steckbriefe Tutorial

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser

Bedienungsanleitung Anlassteilnehmer (Vereinslisten)

arbeitete im Max-Planck-Institut und an der Uni Köln. Von ihm sind bereits mehrere Bücher zu Webthemen erschienen.

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

iphone- und ipad-praxis: Kalender optimal synchronisieren

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Werke der kompakt-reihe zu wichtigen Konzepten und Technologien der IT-Branche: ermöglichen einen raschen Einstieg, bieten einen fundierten

Drucken von Webseiten Eine Anleitung, Version 1.0

Menüband. Änderungen, Irrtümer und Druckfehler vorbehalten. Bearbeitet von Harald Borges. Stand April

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

Erstellen der Barcode-Etiketten:

Speicher in der Cloud

Scholz (Hrsg.) / Krämer / Schollmayer / Völcker. Android-Apps. Konzeption, Programmierung und Vermarktung

Präventionsforum+ Erfahrungsaustausch. HANDOUT GRUPPEN-ADMINISTRATOREN Anlage zum Endnutzer-Handbuch. Stand: Änderungen vorbehalten

SOFiSTiK AG Installationsanleitung

Einführung in LINUX Der Editor vi

Installationsanleitung dateiagent Pro

Thunderbird herunterladen, Installieren und einrichten Version (portable)

Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen.

Bedienerhandbuch Toleranztabellen Version 1.2.x. Copyright Hexagon Metrology

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Auto-Provisionierung tiptel 31x0 mit Yeastar MyPBX

Mozilla Firefox - Zeit für den Wechsel

Update-News. Perigon Neuerungen

Datenexport aus JS - Software

Erweiterung AE WWS Lite Win: AES Security Verschlüsselung

GEVITAS Farben-Reaktionstest

Viele Bilder auf der FA-Homepage

Einführungskurs MOODLE Themen:

SEO Strategie, Taktik und Technik

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Anleitung Postfachsystem Inhalt

Datenbanken Kapitel 2

Informatik Kurs Simulation. Hilfe für den Consideo Modeler

Anwendertreffen 20./21. Juni

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Zinsrechner. Bedienungsanleitung

DIGITALVARIO. Anleitung Bootloader. Ausgabe 0.1 deutsch für Direkt-Digital-Vario. Firmware ab Hardware 01 Seriennummer ab 0003

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

Outlook Web App Kurzanleitung. Zürich, 09. Februar Eine Dienstabteilung des Finanzdepartements

Kurzdokumentation AO Bodenbuch Serienbrief Land-Data Eurosoft GmbH & Co.KG Rennbahnstr Pfarrkirchen

LineQuest-Leitfaden LineQuest Dialog-Portal. Generieren der LineQuest-Auswertungsdatei

Kurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich

Jetzt neu: Online Reporting Schritt für Schritt durch das Online Reporting (OLR) Online Liedmeldung

Kapitel 7 - Wägungen

Erklärung zu den Internet-Seiten von

Bedienung des Web-Portales der Sportbergbetriebe

ecaros2 - Accountmanager

Gezielt über Folien hinweg springen

Installationsanleitung für das Integrity Tool zur AusweisApp Version 1.7 (Microsoft Windows) Dokumentversion 1.0

Mind Mapping am PC. für Präsentationen, Vorträge, Selbstmanagement. von Isolde Kommer, Helmut Reinke. 1. Auflage. Hanser München 1999

Die Computerwerkstatt

Installation der Demoversion vom M-Doc AutoSigner

Anleitung für den Elektronischen Lesesaal der Martin-Opitz Bibliothek

Tastatur auf Hebräisch umstellen

QuickHMI Config Tool. User Guide

Outlook Web App Kurzanleitung

Installationsleitfaden kabelsafe backup professional unter MS Windows

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