Umstellung auf zsh
Apple hat angekündigt, dass in macOS 10.15 Catalina die Standardshell zsh
.
In dieser Serie werde ich meine Erfahrungen mit der Umstellung von bash
Einstellungen, Konfigurationen und Skripten auf zsh
.
- Teil 1 dokumentieren: Umstellung auf zsh (dieser Artikel)
- Teil 2: Konfigurationsdateien
- Teil 3: Shell-Optionen
- Teil 4: Aliase und Funktionen
- Teil 5: Vervollständigungen
- Teil 6: Anpassen der
zsh
Eingabeaufforderung - Teil 7: Verschiedenes
- Teil 8: Skripterstellung
zsh
zsh
(ich glaube, es wird zee-shell ausgesprochen, obwohl zish lustig auszusprechen ist) wird bash
als Standard-Shell ablösen. bash
ist seit Mac OS X 10.3 Panther die Standard-Shell.
Diese Serie ist zu einem Buch herangewachsen: überarbeitet und mit mehr Details und Themen erweitert. Wie bei meinen anderen Büchern plane ich, es auch nach der Veröffentlichung zu aktualisieren und zu ergänzen, um es relevant und nützlich zu halten. Sie können es jetzt im Apple Books Store bestellen.
Warum?
Die mit macOS gebündelte bash
-Binärdatei ist seit langem auf Version 3.2 stehen geblieben. bash
v4 wurde im Jahr 2009 veröffentlicht und bash
v5 im Januar 2019. Der Grund, warum Apple nicht auf diese neueren Versionen umgestellt hat, ist, dass sie unter der GPL v3 lizenziert sind. bash
v3 steht immer noch unter der GPL v2.
zsh
hingegen hat eine „MIT-ähnliche“ Lizenz, die es für Apple viel angenehmer macht, es standardmäßig in das System einzubinden. zsh
ist schon seit langem unter macOS verfügbar. Die zsh
Version auf macOS 10.14 Mojave ist relativ neu (5.3). macOS 10.15 Catalina hat die aktuelle zsh
5.7.1.
Ist bash weg!?
Nein.
macOS Catalina hat immer noch die gleiche /bin/bash
(Version 3.2.57) wie Mojave und frühere macOS Versionen. Diese Änderung gilt nur für neue Konten, die unter macOS Catalina erstellt werden. Wenn du auf Catalina aktualisierst, bleibt die Standard-Shell eines Benutzers die gleiche wie zuvor.
Viele Skripte in macOS, Verwaltungssystemen und Installationsprogrammen von Apple und Drittanbietern verlassen sich auf /bin/bash
. Wenn Apple diese Binärdatei in macOS 10.15 Catalina oder sogar 10.16 einfach entfernt.
Benutzer, die /bin/bash
als Standard-Shell auf Catalina verwenden, werden zu Beginn jeder Terminal-Sitzung eine Eingabeaufforderung sehen, die besagt, dass zsh
nun die empfohlene Standard-Shell ist. Wenn Sie weiterhin /bin/bash
verwenden möchten, können Sie diese Meldung unterdrücken, indem Sie eine Umgebungsvariable in Ihrem .bash_profile
oder .bashrc
setzen.
export BASH_SILENCE_DEPRECATION_WARNING=1
Sie können auch selbst eine neuere Version der Bash herunterladen und installieren. Denken Sie daran, dass benutzerdefinierte Bash-Installationen in einem anderen Verzeichnis liegen, normalerweise /usr/local/bin/bash
.
Wird die Bash auf unbestimmte Zeit bleiben?
Apple rät Ihnen dringend, die Shell zu wechseln. Dies unterscheidet sich von der letzten Umstellung in Mac OS X 10.3 Panther, als Apple die Standardeinstellung auf bash
umstellte, sich aber nicht wirklich darum kümmerte, ob man auf tcsh
blieb. Tatsächlich ist tcsh
in macOS immer noch vorhanden.
Apples Nachrichten sollten uns sagen, dass die Tage von /bin/bash
gezählt sind. Wahrscheinlich nicht sehr bald, aber irgendwann wird es zu einer Belastung, eine mehr als zehn Jahre alte Version von bash
auf dem System zu haben. Die integrierte Bash musste 2014 gepatcht werden, um die „Shellshock“-Schwachstelle zu entschärfen. Irgendwann wird Apple die Kosten für die weitere Wartung als zu hoch ansehen.
Ein weiterer Hinweis ist, dass eine neue Shell auf macOS Catalina erschienen ist (und im Support-Artikel erwähnt wird). Die ‚Debian Almquist Shell‘ dash
wurde der Reihe der Shells hinzugefügt. dash
ist als minimale Implementierung der Posix-Standard-Shell sh
gedacht. Bisher ruft sh
in macOS (einschließlich Catalina) bash
im sh
-Kompatibilitätsmodus auf.
Wie im Support-Artikel von Apple erwähnt, fügt Catalina auch einen neuen Mechanismus für Benutzer und Administratoren hinzu, um zu ändern, welche Shell sh
-Aufrufe behandelt. MacAdmins oder Benutzer können den in /var/select/sh
gespeicherten symbolischen Link so ändern, dass er auf eine andere Shell als /bin/bash
zeigt. Dadurch wird geändert, welche Shell Skripte mit #!/bin/sh
Shebang oder Skripte, die mit sh -c
aufgerufen werden, interpretiert. Das Ändern des Interpreters für sh
sollte nicht, kann aber das Verhalten einiger wichtiger Skripte im System, in Verwaltungswerkzeugen und in Installationsprogrammen ändern, kann aber zu Testzwecken sehr nützlich sein.
Alle diese Änderungen sind Indikatoren dafür, dass Apple sich darauf vorbereitet, /bin/bash
zu einem noch unbestimmten Zeitpunkt in der Zukunft zu entfernen.
Muss ich warten, bis Catalina zu zsh wechselt?
Nein, zsh
ist in Mojave und auf älteren macOS-Versionen verfügbar. Du kannst mit dem Testen von zsh
beginnen oder sogar schon deine Standard-Shell wechseln.
Wenn du nur sehen willst, wie zsh
funktioniert, kannst du einfach Terminal öffnen und zsh
:
$ zshMacBook%
Die wichtigste Änderung, die du sehen wirst, ist, dass die Eingabeaufforderung anders aussieht. zsh
verwendet das Zeichen %
als Standard-Eingabeaufforderung. (Sie können das natürlich ändern.) Die meisten Navigationstasten und andere Verhaltensweisen bleiben die gleichen wie bei bash
.
Wenn Sie Ihre Standard-Shell bereits auf zsh
umstellen wollen, können Sie den Befehl chsh
verwenden:
$ chsh -s /bin/zsh
Damit wird Ihr Passwort abgefragt. Dieser Befehl ändert nicht die aktuelle Shell, sondern alle neuen, also schließen Sie die aktuellen Terminalfenster und Tabs und öffnen Sie eine neue.
Wie unterscheidet sich zsh?
Wie bash
(‚Bourne again shell‘ ) stammt zsh
aus der ‚Bourne‘-Familie von Shells. Aufgrund dieser gemeinsamen Abstammung verhält sie sich im täglichen Gebrauch sehr ähnlich. Die offensichtlichste Änderung ist der unterschiedliche Prompt.
Der Hauptunterschied zwischen bash
und zsh
ist die Konfiguration. Da zsh
die bash
-Konfigurationsdateien (.bash_profile
oder .bashrc
) ignoriert, können Sie nicht einfach angepasste Bash-Einstellungen nach zsh
kopieren. zsh
hat viel mehr Optionen und Punkte, um die Konfiguration und das Verhalten von zsh
zu ändern. Es gibt ein ganzes Ökosystem von Konfigurationswerkzeugen und Themen namens oh-my-zsh
, das sehr beliebt ist.
zsh
bietet auch eine bessere Konfiguration für die Autovervollständigung, die viel einfacher ist als in bash
.
Ich plane einen separaten Beitrag, der beschreibt, wie man seine Konfigurationen von bash
nach zsh
überträgt (und übersetzt).
Wie sieht es mit Skripten aus?
Da zsh
unter macOS schon lange vorhanden ist, können Sie Ihre Skripte sofort von bash
nach zsh
übertragen, ohne die Abwärtskompatibilität zu verlieren. Denken Sie nur daran, den Shebang in Ihren Skripten auf #!/bin/zsh
zu setzen.
Sie werden einige Funktionen erhalten, bei denen zsh
bash
v3 überlegen ist, wie z.B. Arrays und assoziative Arrays (Dictionaries).
Es gibt eine Ausnahme, bei der ich jetzt empfehlen würde, /bin/sh
für Ihre Skripte zu verwenden: das Recovery-System enthält nicht die /bin/zsh
-Shell, auch nicht in der Catalina-Beta. Dies könnte sich während der Beta-Phase oder sogar später noch ändern, aber dann müssen Sie immer noch ältere macOS-Installationen berücksichtigen, bei denen zsh
definitiv nicht im Recovery vorhanden ist.
Wenn Sie planen, Ihre Skripte oder Pakete mit Installationsskripten in einem Recovery- (oder NetInstall- oder bootfähigen USB-Laufwerk) Kontext zu verwenden, wie Twocanoes MDS, installr oder bootstrappr, dann können Sie sich nicht auf /bin/zsh
verlassen.
Da wir nun wissen, dass bash
irgendwann verschwinden wird, bleibt nur noch /bin/sh
.
Wenn Sie ein Installationspaket erstellen, kann es schwierig sein, alle Kontexte vorauszusehen, in denen es eingesetzt werden könnte. Daher würde ich empfehlen, für Skripte vor und nach der Installation von nun an /bin/sh
zu verwenden.
Ich habe früher empfohlen, /bin/bash
für alles zu verwenden, was mit MacAdmin zu tun hat. /bin/sh
ist definitiv ein Schritt nach unten in der Funktionalität, aber es scheint die sicherste Wahl für die weitere Unterstützung zu sein.
Zusammenfassung
Insgesamt ist die Nachricht von Apple zwar sehr interessant, aber die Änderung selbst ist weniger dramatisch als die Schlagzeilen. Apple „ersetzt“ bash
nicht durch zsh
, zumindest noch nicht. Insgesamt werden wir einige Dinge überdenken und neu lernen müssen, aber es gibt auch viel zu gewinnen, wenn wir endlich von einer zehn Jahre alten Shell zu einer neuen, modernen Shell wechseln!
Weiter
Im nächsten Teil werden wir uns die Konfigurationsdateien für zsh
ansehen.