Přechod na zsh

Lis 28, 2021
admin

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‘ ), zshpochá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.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.