ubuntuusers.de

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:

Wiki/Icons/terminal.png 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.

GeltungsbereichSystemweitBenutzerspezifischKommentar
1. Allgemein/etc/zsh/zshenv~/.zshenvUmgebungsvariablen die in jeder Sitzung gelten
2. Login-Shell/etc/zsh/zprofile~/.zprofileBenutzerprofil; Befehle die während der Sitzung zur Verfügung stehen
3. Interaktive Shell/etc/zsh/zshrc~/.zshrcBefehle, die beim Start einer interaktiven Shell ausgeführt werden
4. Login-Shell/etc/zsh/zlogin~/.zloginBefehle, die beim Start jeder Shell ausgeführt werden
5. Logout/etc/zsh/zlogout~/.zlogoutBefehle, 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:

farbiger-zsh-prompt.png

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 

Diese Revision wurde am 25. September 2022 06:14 von cptechnik erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell