Přechod na zsh
Apple oznámil, že v macOS 10.15 Catalina bude výchozím shellem zsh
.
V tomto seriálu budu dokumentovat své zkušenosti s přechodem bash
nastavení, konfigurací a skriptů na zsh
.
- Díl 1: Přechod na zsh (tento článek)
- Část 2: Konfigurační soubory
- Část 3: Možnosti shellu
- Část 4: Aliasy a funkce
- Část 5: Dokončení
- Část 6: Přizpůsobení
zsh
Prompt - Část 7: Různé
- Část 8: Skriptování
zsh
zsh
(myslím, že se to vyslovuje zee-shell, i když zish je zábavné říkat) vystřídá bash
jako výchozí shell. bash
je výchozím shellem od Mac OS X 10.3 Panther.
Tento seriál se rozrostl do knihy: přepracované a rozšířené o další podrobnosti a témata. Stejně jako ostatní mé knihy ji plánuji aktualizovat a doplňovat i po vydání, aby byla stále aktuální a užitečná. Už teď si ji můžete objednat v obchodě Apple Books Store.
Proč?“
Binární soubor bash
dodávaný se systémem macOS se už dlouho zasekl na verzi 3.2.
Proč? bash
Verze 4 byla vydána v roce 2009 a bash
verze 5 v lednu 2019. Důvodem, proč Apple nepřešel na tyto novější verze, je to, že jsou licencovány licencí GPL v3. bash
v3 je stále pod licencí GPL v2.
zsh
má naopak licenci „podobnou MIT“, díky které je pro Apple mnohem přijatelnější ji do systému standardně zahrnout. zsh
Je k dispozici jako v systému macOS již dlouhou dobu. Verze zsh
v macOS 10.14 Mojave je poměrně nová (5.3). macOS 10.15 Catalina má aktuální zsh
5.7.1.
Je bash pryč!?
Ne.
macOS Catalina má stále stejný /bin/bash
(verze 3.2.57) jako Mojave a starší verze macOS. Tato změna se týká pouze nových účtů vytvořených v systému macOS Catalina. Po upgradu na Catalinu zůstane výchozí shell uživatele stejný jako předtím.
Mnoho skriptů v systému macOS, systémech správy a instalačních programech společnosti Apple i třetích stran spoléhá na /bin/bash
. Pokud Apple tuto binárku v macOS 10.15 Catalina nebo dokonce 10.16 prostě vytrhl. Mnoho instalátorů a dalších řešení by se rozbilo a jednoduše by přestalo fungovat.
Uživatelé, kteří mají v systému Catalina jako výchozí shell /bin/bash
, uvidí na začátku každé relace Terminálu výzvu, že doporučeným výchozím shellem je nyní zsh
. Pokud chcete i nadále používat /bin/bash
, můžete tuto zprávu potlačit nastavením proměnné prostředí v .bash_profile
nebo .bashrc
.
export BASH_SILENCE_DEPRECATION_WARNING=1
Můžete si také sami stáhnout a nainstalovat novější verzi bashe. Mějte na paměti, že vlastní instalace bashe se nacházejí v jiném adresáři, obvykle /usr/local/bin/bash
.
Zůstane bash neomezeně dlouho?
Apple důrazně doporučuje, abyste změnili shell. Tím se liší od posledního přepnutí v Mac OS X 10.3 Panther, kdy Apple přepnul výchozí prostředí na bash
, ale příliš se nestaral o to, zda zůstanete na tcsh
. Ve skutečnosti je tcsh
v systému MacOS stále přítomno.
Zprávy společnosti Apple by nám měly napovědět, že dny /bin/bash
jsou sečteny. Pravděpodobně ne příliš brzy, ale nakonec se udržování více než deset let staré verze bash
v systému změní v přítěž. Integrovaný bash musel být v roce 2014 opraven, aby se zmírnila zranitelnost ‚Shellshock‘. V určitém okamžiku bude Apple považovat náklady na další údržbu za příliš vysoké.
Dalším vodítkem je, že se v macOS Catalina objevil nový shell (a je zmíněn v článku o podpoře). Do řady shellů přibyl ‚Debian Almquist Shell‘ dash
. Shell dash
je navržen jako minimální implementace standardního shellu Posix sh
. Zatím v systému macOS (včetně Cataliny) sh
vyvolává bash
v režimu kompatibility sh
.
Jak je zmíněno v článku podpory Apple, Catalina také přidává nový mechanismus pro uživatele a správce, který umožňuje změnit, který shell zpracovává volání sh
. MacAdmini nebo uživatelé mohou změnit symbolický odkaz uložený v /var/select/sh
tak, aby ukazoval na jiný shell než /bin/bash
. Tím se změní, který shell interpretuje skripty shebang #!/bin/sh
nebo skripty vyvolané pomocí sh -c
. Změna interpretu pro sh
by neměla, ale může změnit chování několika klíčových skriptů v systému, nástrojích pro správu a v instalátorech, ale může být velmi užitečná pro účely testování.
Všechny tyto změny naznačují, že se Apple chystá /bin/bash
v nějaké, zatím neurčené době v budoucnu odstranit.
Musím čekat, až Catalina přejde na zsh?
Ne, zsh
je k dispozici Mojave a na starších verzích macOS. Můžete začít testovat zsh
nebo dokonce již přepnout svůj výchozí shell.
Pokud se chcete jen podívat, jak zsh
funguje, stačí otevřít Terminál a zadat zsh
:
$ zshMacBook%
Hlavní změna, kterou uvidíte, je, že prompt vypadá jinak. zsh
používá jako výchozí prompt znak %
. (Ten můžete samozřejmě změnit.) Většina navigačních kláves a další chování zůstane stejné jako v bash
.
Pokud chcete již přepnout výchozí shell na zsh
, můžete použít příkaz chsh
:
$ chsh -s /bin/zsh
Tento příkaz se zeptá na vaše heslo. Tento příkaz nezmění aktuální shell, ale všechny nové, takže zavřete aktuální okna a karty Terminálu a otevřete nový.
Jak se liší zsh?
Stejně jako bash
(‚Bourne again shell‘ ), zsh
pochází z rodiny shellů ‚Bourne‘. Díky tomuto společnému původu se při každodenním používání chová velmi podobně. Nejnápadnější změnou bude odlišný prompt.
Hlavním rozdílem mezi bash
a zsh
je konfigurace. Protože zsh
ignoruje konfigurační soubory bash
(.bash_profile
nebo .bashrc
), nemůžete do zsh
jednoduše zkopírovat vlastní nastavení bashe. zsh
má mnohem více možností a bodů pro změnu konfigurace a chování zsh
. Existuje celý ekosystém konfiguračních nástrojů a témat oh-my-zsh
, který je velmi populární.
zsh
také nabízí lepší konfiguraci pro automatické dokončování, které je mnohem jednodušší než v bash
.
Plánuju samostatný příspěvek, kde popíšu, jak přenést (a převést) konfiguraci z bash
do zsh
.
A co skripty?
Protože zsh
je v systému macOS přítomen už dlouho, mohli byste začít přesouvat své skripty z bash
do zsh
hned a neztratit zpětnou kompatibilitu. Jen nezapomeňte ve svých skriptech nastavit shebang na #!/bin/zsh
.
Získáte tak některé funkce, ve kterých je zsh
lepší než bash
v3, například pole a asociativní pole (slovníky).
Existuje jedna výjimka, kdy bych nyní doporučil používat pro své skripty /bin/sh
: systém Recovery neobsahuje shell /bin/zsh
, a to ani v beta verzi Cataliny. To se ještě může změnit ve fázi betaverze nebo i později, ale pak je třeba ještě počítat se staršími instalacemi macOS, kde zsh
v Recovery rozhodně není.
Pokud plánujete používat své skripty nebo pkg s instalačními skripty v kontextu Recovery (nebo NetInstall, nebo bootovací USB disk), jako je Twocanoes MDS, installr nebo bootstrappr, pak se nemůžete spolehnout na /bin/zsh
.
Protože nyní víme, že bash
nakonec zmizí, zbývá jediná běžná volba /bin/sh
.
Při sestavování instalačního balíčku může být obtížné předvídat všechny kontexty, ve kterých by mohl být nasazen. Pro předinstalační a poinstalační skripty bych tedy od nynějška doporučoval používat jako shebang /bin/sh
.
Dříve jsem doporučoval používat /bin/bash
pro vše, co souvisí s MacAdminem. /bin/sh
je rozhodně krokem dolů ve funkčnosti, ale zdá se, že je to nejbezpečnější volba pro další podporu.
Shrnutí
Celkově je sice sdělení společnosti Apple velmi zajímavé, ale samotná změna je méně dramatická než titulky. Společnost Apple „nenahrazuje“ bash
zsh
, alespoň zatím ne. Celkově si budeme muset pár věcí znovu promyslet a naučit se, ale také můžeme hodně získat tím, že konečně přejdeme z deset let starého shellu na nový moderní!“
Další
V příštím díle se podíváme na konfigurační soubory pro zsh
.
.