Bereits Kunde? Jetzt einloggen.
Lesezeit ca. 8 Min.

Bash vs. Zsh: Die zwei beliebtesten Shells im Direktvergleich: Bourne Again Shell vs. Z-Shell: Kopf-an-Kopf-Rennen


LinuxUser - epaper ⋅ Ausgabe 1/2021 vom 17.12.2020

Bash und Zsh gelten heute im Linux- und BSD-Umfeld als die beiden Standard-Shells. Zwar haben sie einiges gemeinsam, es gibt aber auch deutliche Unterschiede.


Artikelbild für den Artikel "Bash vs. Zsh: Die zwei beliebtesten Shells im Direktvergleich: Bourne Again Shell vs. Z-Shell: Kopf-an-Kopf-Rennen" aus der Ausgabe 1/2021 von LinuxUser. Dieses epaper sofort kaufen oder online lesen mit der Zeitschriften-Flatrate United Kiosk NEWS.

Bildquelle: LinuxUser, Ausgabe 1/2021

README
Die Bash und die Zsh sind bei fast allen Linux- Distributionen und BSD-Derivaten im Einsatz. Dieser Artikel nimmt die Konfiguration der beiden Befehlszeilenschnittstellen unter die Lupe und beleuchtet insbesondere die Unterschiede der beiden Shells.

Sowohl die Bourne Again Shell Bash als auch die Z-Shell Zsh ermöglichen ein komfortables Arbeiten und weisen in der allgemeinen Bedienung viele Gemeinsamkeiten auf. So blättern Sie bei beiden mit ...

Weiterlesen
epaper-Einzelheft 5,99€
NEWS 14 Tage gratis testen
Bereits gekauft?Anmelden & Lesen
Leseprobe: Abdruck mit freundlicher Genehmigung von LinuxUser. Alle Rechte vorbehalten.

Mehr aus dieser Ausgabe

Titelbild der Ausgabe 1/2021 von Garuda Linux: Garuda Linux: Innovativer Allrounder aus Indien: Flexibles Fabelwesen. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Garuda Linux: Garuda Linux: Innovativer Allrounder aus Indien: Flexibles Fabelwesen
Titelbild der Ausgabe 1/2021 von Angetestet. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Angetestet
Titelbild der Ausgabe 1/2021 von Ugrep: Effizienter suchen mit Ugrep: Aufgespürt. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Ugrep: Effizienter suchen mit Ugrep: Aufgespürt
Titelbild der Ausgabe 1/2021 von Aalib/ Libcaca: Bilder im Terminal und in Webseiten als Text darstellen: Eingebildet. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Aalib/ Libcaca: Bilder im Terminal und in Webseiten als Text darstellen: Eingebildet
Titelbild der Ausgabe 1/2021 von Daten löschen: Daten sicher löschen: Radierer für Daten. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Daten löschen: Daten sicher löschen: Radierer für Daten
Titelbild der Ausgabe 1/2021 von Screenwriting: Drehbücher mit Linux schreiben: Voll das Drama. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Screenwriting: Drehbücher mit Linux schreiben: Voll das Drama
Vorheriger Artikel
Ugrep: Effizienter suchen mit Ugrep: Aufgespürt
aus dieser Ausgabe
Nächster Artikel Aalib/ Libcaca: Bilder im Terminal und in Webseiten als Text dars…
aus dieser Ausgabe

... den Pfeiltasten in der Befehlshistorie und können Befehle und Dateinamen mit der Tabulatortaste vervollständigen.

Sowohl für die Bash als auch die Zsh stehen ausführliche Handbücher zur Verfügung.

Beide Befehlszeilenschnittstellen eignen sich auch als Login-Shell. Welche das System bei der Anmeldung verwendet, legt der dem Benutzer zugeordnete Eintrag in der Datei /etc/passwd fest. Er enthält neben dem Heimatverzeichnis des Benutzers auch die Login-Shell. Listing 1 zeigt ein Beispiel für den Benutzer bash_user.

Die Konfigurationsdateien der jeweiligen Shell befinden sich systemweit unter /etc sowie als sogenannte Dotfiles im Heimatverzeichnis des Benutzers. Die Einträge im Benutzerverzeichnis haben Vorrang vor den systemweiten Einstellungen.

Es macht hinsichtlich der Konfigurationseinträge einen Unterschied, ob die Shell bei der Anmeldung startet (Login- Shell) oder manuell während einer Sitzung aufgerufen wird.

Viele Shells nutzen allerdings die Dateien /etc/profile (systemweit) und ~/.profile (benutzerspezifisch). So kann man Anweisungen auch für verschiedene Shells hinterlegen.

Z-Shell konfigurieren

Während nach der erstmaligen Anmeldung oder dem manuellen Aufruf der Bash am Terminal erst einmal nichts Weiteres geschieht, startet die Zsh ein Menü 1, in dem Sie einige Einstellungen vornehmen können, da die Datei .zshrc noch fehlt. In diesem Menü drücken Sie zunächst [1], um in das Hauptmenü 2 zu gelangen.

Dort arbeiten Sie nacheinander die Menüpunkte ab. In den einzelnen Unterpunkten sehen Sie neben den Einträgen die Warnung (not yet saved), falls diese geändert, aber noch nicht gespeichert wurden. Mit 0 springen Sie jeweils in das darüberliegende Menü zurück.

Drücken Sie im Hauptmenü zunächst wieder auf die [1], um den Umfang der Historie festzulegen. Im Beispiel aus Abbildung 3 wurde sie auf 10 000 Zeilen erweitert.

Mit der [2] gelangen Sie aus dem Hauptmenü zu den Einstellungen für die Autovervollständigung. Sie wählen hier zwischen dem Standardverhalten (1) oder mehr Komfort (2).

Unter Punkt 3 im Hauptmenü legen Sie das Tastaturverhalten für das Bearbeiten von Kommandozeilen fest. Hier belassen Sie am besten den vorgeschlagenen Wert. Unter Punkt 4 bestimmen Sie das weitere Verhalten der Shell 4.

Jeweils mit [0] geht es aus den einzelnen Punkten wieder zurück ins Hauptmenü, wo Sie mit einem erneuten Druck auf [0] die Einstellungen speichern und damit die Vorarbeiten beenden. Bei der nächsten Anmeldung greifen dann die getroffenen Einstellungen.

Der Prompt fällt bislang noch relativ karg aus. Mit dem Befehl aus der ersten Zeile von Listing 2 laden Sie schon verfügbare Prompts. Davon bringt die Zsh bereits eine ganze Reihe mit, die der Befehl prompt ‑l auflistet. Das Kommando prompt ‑p zeigt Ihnen ein Muster, prompt ‑s setzt den Eintrag. Der Befehl aus der zweiten Zeile von Listing 2 er- leichtert die Auswahl: Er zaubert die Muster schier endlos auf das Terminal 5, wobei er ein- und zweizeilige Konstrukte anbietet.

1 Das Startmenü bei einer noch nicht konfigurierten Z-Shell.


2 Das Hauptmenü zur Konfiguration der Z-Shell.


Die Zweizeiler haben den Vorteil, dass jeder Befehl und dessen Ausgabe optisch vom nächsten abgetrennt im Terminal erscheint - für Dokumentationszwecke optimal. Nach dem Setzen mit prompt ‑s Muster erscheint der Hinweis, dass Sie für ein dauerhaftes Ändern des Prompts das jeweilige Muster in der ~/.zshrc eintragen müssen. Der Eintrag besteht aus drei Zeilen (Listing 3).

Konfigurationsdateien

In vielen Quellen zur Shell-Konfiguration ist von der Datei .profile die Rede. Sie nimmt Einstellungen und Befehle auf, die die Shell bei der Anmeldung am System abarbeiten soll. Dies funktioniert so lange, wie keine Shell-eigene Profile-Datei vorhanden ist.

Die weiteren Konfigurationsdateien zeigen Ihnen die Tabellen Bash: Konfigurationsdateien und Zsh: Konfigurationsdateien.

Es werden nur die Dateien, die Sie im Benutzerverzeichnis finden (können) aufgelistet. Die systemweit gültigen finden Sie unter gleichem Namen ohne führenden Punkt unter /etc.

Beim Login arbeitet die Bash zunächst die .bashrc und anschließend die Datei .bash_profile ab. In Abbildung 6 sehen Sie ganz oben den Zustand nach der Anmeldung (.bashrc, .bash_profile).

Dann erfolgt ein manueller Start der Bash (.bashrc). Beim Abmelden von der Sitzung arbeitet die Shell die Anweisungen aus der .bash_logout ab. Für die Demonstration wurde einfach ein entsprechender echo-Befehl eingefügt.

Die Z-Shell arbeitet bei der Anmeldung die Konfigurationsdateien in der Reihenfolge .zprofile, .zshrc und .zlogin ab. In der Datei .zshenv nehmen Sie Einstellungen vor, die für alle Aufrufarten gelten. Im Beispiel aus Abbildung 7 finden Sie die mit dem Wert 1 belegte Variable $wert. Beim manuellen Aufruf wertet die Zsh nur .zshrc und .zshenv aus, wie die Variablenausgabe dokumentiert. Beim Abmelden der Sitzung werden die Befehle aus .zlogout ausgeführt.

Beispiel für die Bash

Allgemein gültige Eintragungen nehmen Sie in der Datei .bashrc vor, sodass sie sowohl beim Login als auch beim manuellen Aufruf der Shell greifen.

5 Anzeige der Prompt-Muster.


Für den Prompt belegen Sie die Variable PS1. Dabei setzen Sie Farben und Schriftattribute durch Escape-Sequenzen, den Prompt-Inhalt durch entsprechende Platzhalter. Daneben besteht die Möglichkeit, in begrenztem Umfang sogar Shell-Befehle in einer Subshell unterzubringen, zum Beispiel pwd.

Eine kompakte Übersicht über die Gestaltungsmöglichkeiten bietet zum Beispiel das Arch-Linux-Wiki . Für erste Experimente fasst die Tabelle Bash-Prompt einige Informationen für den Einstieg zusammen, kann aber nur einen begrenzten Ausschnitt der vielfältigen Möglichkeiten darstellen.

Prompt gestalten

Sie haben viele Gestaltungsmöglichkeiten für den Prompt, vom minimalistischen Nichts bis zur vollen Zeile. Bemühen Sie sich aber immer um Übersichtlichkeit.

So benötigen Sie Datum und Uhrzeit sowie die laufende Befehlsnummer etwa, um in Bildschirmabzügen wichtige Eingaben zu dokumentieren.

In der täglichen Arbeit kann ein zu umfangreicher Prompt zudem zu Unübersichtlichkeit führen.

In unserem Beispiel soll der Prompt den Benutzer- und Rechnernamen sowie das aktuelle Arbeitsverzeichnis anzeigen.

Die entsprechende Anweisung sowie deren Resultat sehen Sie in Abbildung 9.

Zunächst erscheint das Arbeitsverzeichnis ärgerlicherweise schlecht lesbar in Hellgrau, sodass es gilt, zusätzlich die Farbeinstellung zu ändern. Wie die Abbildung zeigt, können Sie mittels direkter Eingabe experimentieren.

In der .bashrc befindet sich im Regelfall bereits eine Prompt-Definition. Sie ändern diese entsprechend ab oder setzen die Zeile aus Listing 4 an den Schluss der Datei, um den in Abbildung 9 gezeigten Prompt dauerhaft zu aktivieren.

Häufig verfügt man über selbst erstellte Skripte und Programme, für die sich traditionell als Lagerort das Verzeichnis ~/bin eingebürgert hat. Erweitert man die Pfadvariable $PATH des Systems entsprechend, lassen diese Werkzeuge sich ohne Pfadangabe aufrufen. Dafür sorgt der folgende einfache Eintrag am Ende der Datei .bashrc: PATH=$(echo $PATH:$HOME/bin) Befehlsaliase ermöglichen die Definition eigener Kommandos oder das dauerhafte Verwenden von Optionen, die Sie sonst jedes Mal von Hand eingeben müssten. Als Beispiel soll Grep veranlasst werden, Fundstellen stets farbig hervorzuheben.

In der .bashrc finden sich schon einige Aliase, unter die Sie einfach folgende Zeile setzen: alias grep='grep ‑‑color' Ab dem nächsten Anmelden oder Shell- Start erhalten Sie entsprechende Suchergebnisse mit farbigen Hervorhebungen.

Beispiel für die Zsh

Im Prinzip ähnlich, im Detail aber durchaus anders, setzen Sie Konfigurationseinträge in der .zshrc. So funktioniert das Setzen eines Prompts grundsätzlich wie bei der Bash, selbst die Escape-Sequenzen für die Farben sind dieselben . In der Zsh leiten Sie sie aber mittels \e ein. Die Platzhalter für den Prompt-Inhalt unterscheiden sich dagegen völlig von denen für die Bash (siehe Tabelle Zsh- Prompt). Weitere Informationen dazu finden Sie im Zsh-Handbuch .

8 Das automatische Starten von Anweisungen samt Benutzerabmeldung.


Um in der Zsh denselben Prompt wie in Abbildung 9 zu erhalten, verwenden Sie die Anweisung aus Listing 5. Die Anweisung \e[0m setzt dabei die Farbe auf die Grundeinstellung des Terminals zurück.

Variablen und Aliase tragen Sie in die Datei .zshenv ein. Auf dem Testsystem des Autors wurden die üblichen Farben für Verzeichnisse, ausführbare Dateien und so weiter beim Ls-Befehl nicht ausgegeben, was sich durch folgende Zeile korrigieren ließ:

alias ls="ls ‑‑color"

Das Anlegen weiterer Variablen und die Erweiterung von $PATH funktionieren wie bei der Bash und werden in .zshenv eingetragen.

History

Beide Shells speichern eine vorher definierte Anzahl von Kommandos in der History. Die Bash legt diese in .bash_ history ab, die Zsh in .histfile. Beide Dateien lassen sich mit gängigen Textwerkzeugen betrachten und bei Bedarf ändern. So könnten Sie für bestimmte Szenarien komplexe Kommandos in einer Textdatei ablegen und die aktuelle History damit überschreiben.

10 Das Ausführen der Shell-Skripte aus Listing 6 und Listing 7.


Mit den Pfeiltasten navigieren Sie in der Historie. Das reine Auflisten erledigt der Befehl history beziehungsweise fc ‑l. Kennen Sie die Zeilennummer, können Sie den Befehl auch in der Form !Zeile aufrufen und ausführen. Wurden Kennwörter als Kommandobestandteil verwendet, löschen Sie diese Zeilen am besten mit dem Editor Ihrer Wahl.

Variablen

Das Belegen einer Variablen in der Form Variable=Wert funktioniert bei beiden Shells gleich. Bei den Benutzereingaben und den Ausgaben gibt es Unterschiede (Tabelle Unterschiede bei der Ein- und Ausgabe), vom Befehl echo einmal abgesehen. Mit dem Kommando read (Bash) beziehungsweise vared (Zsh) ersetzen Sie das folgende gängige Konstrukt:

$ echo ‑n "Eingabe: "; read a

Beachten Sie bei der Read-Anweisung der Bash, dass die Variable in Anführungszeichen steht. Das ermöglicht die Bearbeitung von Zeichenketten, in denen Leerzeichen vorkommen. Sowohl read als auch vared funktionieren auch ohne vorbelegte Variable. Listing 6 und Listing 7 zeigen die praktische Anwendung von read und vared in Shell-Skripten, Abbildung 0 die Ausführung.

Zu den Optionen des Bash-Read zählen Beschränkungen für Art und Anzahl der Zeichen sowie ein Auto-Enter nach erfolgter Eingabe. Das Zsh-spezifische Kommando print bietet zum Beispiel die sortierte Ausgabe in einem Rutsch.

Die Option ‑o sortiert die Ausgabe aufsteigend, ‑O ordnet sie absteigend q.

Die spaltenweise Ausgabe ermöglichen die Optionen ‑a zusammen mit entweder ‑c oder ‑CSpaltenzahl. Die Abbildung w zeigt einige Beispiele.

Weitere Unterschiede

Sowohl in der Bash als auch in der Zsh können Sie mehr oder weniger alle gebräuchlichen Sprachelemente verwenden. Damit verzichten Sie allerdings auf das eine oder andere Leistungsmerkmal. So bietet Zsh mit repeat Anzahl Befehl die Möglichkeit, ein Kommando mehrfach auszuführen e. Geschickt eingesetzt, erhält man damit eine Art For- Schleife als übersichtlichen Einzeiler. Die Zsh bietet einen umfangreichen Befehlssatz für Netzwerkoperationen mittels TCP/ IP an. Datenübertragungen funktionieren mit dem ZFTP-Subsystem. Daneben integriert die Z-Shell eigene Kalenderfunktionen. Ein Teil dieser Zusatzfunktionen residiert in Plugins, die man entsprechend vorab laden muss.

Fazit

Beide Shells weisen zahlreiche Stärken auf und haben kaum Schwächen. Sowohl die Bourne Again Shell als auch die ZShell sind ausgereift, die Arbeit mit ihnen macht Spaß.

In Sachen Ausstattungsumfang hat die Z-Shell klar die Nase vorn. Nach einer Einarbeitung in die zusätzlichen Funktionen steht Ihnen ein prall gefüllter Werkzeugkasten zur Verfügung. (jlu) n

Weitere Infos und interessante Links www.linux-user.de/qr/43879

Der Autor
Harald Zisler beschäftigt sich seit den frühen 1990er-Jahren mit FreeBSD und Linux. Zu Technik- und EDV-Themen verfasst er Zeitschriftenbeiträge und Bücher.™

Bedeutung der Konfigurationsdateien
Neben dem Setzen von Variablen, Aliasen und so weiter ermöglichen die Konfigurationsdateien, beim An- und Abmelden Programme auszuführen. Das ermöglicht unter anderem, viele Aufgaben durch das Anlegen speziell darauf zugeschnittener Benutzerkonten zu erleichtern, zum Beispiel für die Datensicherung, für Stapeljobs in der Datenfernübertragung, für die Systemwartung und so weiter. Auf diesem Weg lassen sich zum Beispiel Aufgaben auch an EDV-Laien delegieren, weil sie sich dazu lediglich anmelden müssen. Ans Ende der jeweiligen Startdatei setzen Sie ein exit, um den Benutzer nach dem Erfüllen der Aufgabe automatisch abzumelden. Ein Beispiel, bei dem die Anmeldung des Benutzers platte automatisch die Belegung der Massenspeicher ausgibt, zeigt Abbildung 8. Für die Bash tragen Sie die fraglichen Befehle (df ‑h; exit; entweder in der Datei .bash_profile oder in .bashrc ein. Bei der Zsh können die Anweisungen sowohl in der Datei .zshrc als auch in .zlogin oder .zprofile stehen.


William Attard McCarthy, 123RF