[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/terminal.png, 48, left)]] Die [https://www.zsh.org/ Zsh] {en} ist neben der [:Bash:] eine weitere sehr mächtige [:Shell:] und Skriptsprache, die viele Möglichkeiten bietet. Die Zsh ist von diversen anderen Shells beeinflusst, wie beispielsweise der Korn-Shell (ksh), der C-Shell (csh) oder der TENEX C-Shell (tcsh). Der größte Vorteil der Z-Shell ist wohl der sehr ausgereifte Command-Editor. = Installation = Folgendes Paket muss installiert werden [1]: {{{#!vorlage Paketinstallation zsh }}} Möchte man '''zsh''' als seine Standard-Shell einrichten, reicht ein Aufruf von [:chsh:] und der Eingabe von '''/usr/bin/zsh''': {{{#!vorlage Befehl chsh Passwort: Login-Shell für Mustermann wird geändert. Geben Sie einen neuen Wert an oder drücken Sie ENTER für den Standardwert Login-Shell [/usr/bin/bash]: /usr/bin/zsh }}} Von nun an ist Zsh die Standardshell. Mit derselben Methode kann auch wieder zu [:Bash:] oder [:Dash:] gewechselt werden. Wird die Shell einer laufenden Sitzung verändert, so muss sich der Nutzer erst neu anmelden, bevor er seine neue Shell nutzen kann. = Konfiguration = Die Konfiguration wird in verschiedenen Dateien festgelegt, die beim Start der Z-Shell eingelesen werden. Die folgende Tabelle gibt Aufschluss über den Geltungsbereich der Einstellungen und die Reihenfolge, in der die so genannten ''start-up-files'' verarbeitet werden. ||Geltungsbereich||Systemweit||Benutzerspezifisch||Kommentar|| ||1. Allgemein||'''/etc/zsh/zshenv'''||'''~/.zshenv'''||[:Umgebungsvariablen:] die in jeder Sitzung gelten|| ||2. Login-Shell||'''/etc/zsh/zprofile'''||'''~/.zprofile'''||Benutzerprofil; Befehle die während der Sitzung zur Verfügung stehen|| ||3. Interaktive Shell||'''/etc/zsh/zshrc'''||'''~/.zshrc'''||Befehle, die beim Start einer interaktiven Shell ausgeführt werden|| ||4. Login-Shell||'''/etc/zsh/zlogin'''||'''~/.zlogin'''||Befehle, die beim Start jeder Shell ausgeführt werden|| ||5. Logout||'''/etc/zsh/zlogout'''||'''~/.zlogout'''||Befehle, die beim Beenden ausgeführt werden|| == Konfiguration von Grml == Die Linuxdistribution [https://grml.org/ Grml] {en} bringt die Zsh von Haus aus mit und hat diese über die .zshrc sehr gut vorkonfiguriert. Um diese bei sich nutzen zu können installiert man sie sich mit dem Befehl: {{{#!vorlage Befehl wget -O ~/.zshrc https://raw.githubusercontent.com/grml/grml-etc-core/master/etc/zsh/zshrc }}} {{{#!vorlage Hinweis Die bestehende Konfiguration wird dabei überschrieben. }}} == Prompt in Farbe == Die Globale Variable heisst nicht PS sondern PROMPT, wobei es auch einen RPROMT gibt, der am rechten Rand Informationen definiert. {{{#!vorlage Tabelle Variablen sind: +++ Login +++ %M Hostname +++ %n Nutzername +++ `Weitere: %l TTY / %m Hostname bis ersten Punkt / %y TTL ungekürzt` +++ Shell Status +++ %d aktuelles Verzeichnis +++ %~ aktuelles Verzeichnis, Heimatverzeichnis abgekürzt +++ `Weitere: %? Statuscode vorheriges Prg. / %h Bef.-Verlauf-Nummer / %C schleppendes Verzeichnis` +++ Datum und Zeit +++ %D Datum als JJ-MM-TT +++ %T Uhrzeit (SS:MM) +++ %t Uhrzeit 12Std-Format (SS:MM) with AM/PM ; Alternative: %@ +++ %* Uhrzeit mit Sekunden +++ %w Datum mit Wochentag +++ %W Datum dezimal MM/TT/JJ +++ %D{string} Datum/Uhrzeit als [https://wiki.ubuntuusers.de/Baustelle/strftime-Formatierung/ strftime Format] }}} {{{#!vorlage Tabelle Effekt-Parameter sind: +++ Start Stop Effekt +++ %B %b Bold / Fettschrift +++ %U %u Underline +++ %S %s Highlighted +++ %F{color} %f Vordergrundfarbe +++ %K{color} %k Hintergrundfarbe }}} Die Farben entsprechen der 16 und 256 Bit [https://www.tweaking4all.com/software/macosx-software/xterm-color-cheat-sheet/ Farbtabelle] {en} für XTerm. Eine dem Suse-Shell ähnlichem aber farblichen Code sähe dann so aus: [[Bild(farbiger-zsh-prompt.png )]] und könnte so {{{#!vorlage Befehl PROMPT='%F{184}%n%f@%F{013}%m%f:%~/ > ' }}} zB. in die ~/.zshrc eingetragen werden. = Module = Durch Module kann die Zsh erweitert werden. Module werden mit dem Befehl: {{{#!vorlage Befehl autoload -U }}} geladen und durch den Aufruf von gestartet. == zftp == Das Modul der Z-Shell für das [wikipedia:File Transfer Protocol:] kann einzeln geladen oder fest eingebunden werden. Im Artikel zu [:Zsh/zftp:zftp] ist ein Mittelweg beschrieben: die Einbindung für einen einzelnen Benutzer. Zudem werden einfache Befehle für die Sitzungsverwaltung und den Dateitransfer erklärt. == Prompt Themes == Das Modul '''promptinit''' bietet einige voreingestellte Prompt-Themes, mit denen man das (etwas langweilige) Standard-Prompt verschönern kann. Zuerst wird das Modul geladen und gestartet: {{{#!vorlage Befehl autoload -U promptinit && promptinit }}} Jetzt hat man das Kommando '''prompt''' zur Verfügung, mit dem man die Prompt-Themes laden kann: {{{#!vorlage Befehl prompt -c # zeigt den derzeit gewählten Theme prompt -l # zeigt alle verfügbaren Themes prompt -p # zeigt ein Preview des Themes prompt -s # ändert die Shell zum Theme und speichert diesen prompt # ändert die Shell zu , speichert aber nicht }}} == Erweitertes Alias == In der zsh gibt es neben der bekannten Möglichkeit, ein [:alias:] zu setzen, noch 2 weitere Möglichkeiten. === Globales Alias === Globale Ersetzungen arbeiten grundsätzlich wie ein normales [:alias:], mit dem einzigen Unterschied, dass globale Ersetzungen in jedem Teil des Befehls auftauchen dürfen und können. So lassen sich (zum Beispiel) häufig genutzte Pipes geschickt abkürzen. Ein [:alias:] für eine Pipe mit [:less:] sieht so aus: {{{#!vorlage Befehl alias -g L=' | less' }}} Weitere Beispiele dazu gibt es im [https://zshwiki.org/home/examples/aliasglobal Zsh-Wiki] {en}. === Suffix Alias === Mit zsh besteht die Möglichkeit, Dateiendungen (Suffixe) mit einer bestimmten Anwendung zu verknüpfen. Dann reicht es, den Namen der Datei im [:Terminal:] einzugeben, diese wird dann mit der definierten Anwendung geöffnet. So werden im folgenden Beispiel Dateien mit dem Suffix "wav" mit play abgespielt: {{{#!vorlage Befehl alias -s wav='play -q' }}} Auch hier bietet das [https://zshwiki.org/home/examples/aliassuffix Zsh-Wiki] {en} weitere Beispiele. ==command-not-found== Das nützliche Werkzeug [:command-not-found:], das einem in der [:Bash:] anzeigt, mit welchem Paket sich das eben aufgerufene aber nicht vorhandene Programm installieren lässt, ist in der zsh leider nicht standardmäßig aktiv. Zur Aktivierung muss die Datei '''/etc/zsh_command_not_found''' entweder am Ende der Datei '''/etc/zsh/zshrc''' (systemweit) oder in der Datei '''~/.zshrc''' (benutzerspezifisch) eingebunden werden. Aus {{{#!code bash ... # If you don't want compinit called here, place the line # skip_global_compinit=1 # in your $ZDOTDIR/.zshenv or $ZDOTDIR/.zprofice if [[ -z "$skip_global_compinit" ]]; then autoload -U compinit compinit fi }}} wird (Zeilen 9-13 sind hinzugefügt worden) {{{#!code bash ... # If you don't want compinit called here, place the line # skip_global_compinit=1 # in your $ZDOTDIR/.zshenv or $ZDOTDIR/.zprofice if [[ -z "$skip_global_compinit" ]]; then autoload -U compinit compinit fi if [[ -x /usr/lib/command-not-found ]] ; then function command_not_found_handler() { /usr/lib/command-not-found --no-failure-msg -- $1 } fi }}} Beipielausgabe ohne '''command not found''' {{{#!vorlage Befehl % gps-correlate zsh: command not found: gps-correlate }}} Beipielausgabe mit '''command not found''' {{{#!vorlage Befehl % gps-correlate zsh: command not found: gps-correlate No command 'gps-correlate' found, did you mean: Command 'gpscorrelate' from package 'gpscorrelate' (universe) gps-correlate: command not found }}} = Links = * [iawm::][https://web.archive.org/web/20141218121746/http://zinformatik.de/tipps-tricks/interessante-programme/die-z-shell-zsh-eine-machtige-alternative-zur-bash/ Die Z-Shell (zsh) – Eine mächtige Alternative zur Bash] {de} - Blogbeitrag, 02/2010 (archivierte Version von Archive.org) * [https://zshwiki.org/home/ Zsh-Wiki] {en} * [https://grml.org/zsh/zsh-lovers.html Zsh-Lovers] {en} * [http://www.rayninfo.co.uk/tips/zshtips.html Tipps&Tricks] {en} * [http://strcat.de/zsh/ strcat.de/zsh] {en} Gute Einführung in die Zsh mit vielen Beispielen * Die Zsh-Liebhaber-Seite nur noch im [https://web.archive.org/web/20210622002733/https://michael-prokop.at/computer/tools_zsh_liebhaber.html Archiv] {de}, neue einzelne Artikel im [https://michael-prokop.at/blog/index.php?s=zsh Blog] * [github:robbyrussell/oh-my-zsh:] {en} - Framework zum einfachen Einstieg, bei dem man "Oh meine Zsh" ruft * [wikipedia:Unix-Shell:Unix-Shell] Unix-Shells in der Wikipedia # tag: Shell