Umstellung auf zsh

Nov 28, 2021
admin

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 zshaus 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.