Zsh
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Die Zsh 🇬🇧 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]:
zsh
Befehl zum Installieren der Pakete:
sudo apt-get install zsh
Oder mit apturl installieren, Link: apt://zsh
Möchte man zsh als seine Standard-Shell einrichten, reicht ein Aufruf von chsh und der Eingabe von /usr/bin/zsh:
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 Grml 🇬🇧 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:
wget -O ~/.zshrc https://raw.githubusercontent.com/grml/grml-etc-core/master/etc/zsh/zshrc
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.
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 strftime Format |
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 Farbtabelle 🇬🇧 für XTerm.
Eine dem Suse-Shell ähnlichem aber farblichen Code sähe dann so aus:
und könnte so
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:
autoload -U <modulname>
geladen und durch den Aufruf von <modulname> gestartet.
zftp¶
Das Modul der Z-Shell für das File Transfer Protocol kann einzeln geladen oder fest eingebunden werden. Im Artikel zu 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:
autoload -U promptinit && promptinit
Jetzt hat man das Kommando prompt zur Verfügung, mit dem man die Prompt-Themes laden kann:
prompt -c # zeigt den derzeit gewählten Theme prompt -l # zeigt alle verfügbaren Themes prompt -p <name> # zeigt ein Preview des Themes prompt -s <name> # ändert die Shell zum Theme <name> und speichert diesen prompt <name> # ändert die Shell zu <name>, 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:
alias -g L=' | less'
Weitere Beispiele dazu gibt es im Zsh-Wiki 🇬🇧.
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:
alias -s wav='play -q'
Auch hier bietet das Zsh-Wiki 🇬🇧 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
1 2 3 4 5 6 7 8 | ... # 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)
1 2 3 4 5 6 7 8 9 10 11 12 13 | ... # 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
% gps-correlate zsh: command not found: gps-correlate
Beipielausgabe mit command not found
% 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¶
Die Z-Shell (zsh) – Eine mächtige Alternative zur Bash 🇩🇪 - Blogbeitrag, 02/2010 (archivierte Version von Archive.org)
Zsh-Wiki 🇬🇧
Zsh-Lovers 🇬🇧
Tipps&Tricks 🇬🇧
strcat.de/zsh 🇬🇧 Gute Einführung in die Zsh mit vielen Beispielen
Die Zsh-Liebhaber-Seite nur noch im Archiv 🇩🇪, neue einzelne Artikel im Blog
robbyrussell/oh-my-zsh 🇬🇧 - Framework zum einfachen Einstieg, bei dem man "Oh meine Zsh" ruft
Unix-Shell Unix-Shells in der Wikipedia