A zsh-ra való áttérés
Az Apple bejelentette, hogy a macOS 10.15 Catalina rendszerben az alapértelmezett shell a zsh
.
Ebben a sorozatban a bash
beállítások, konfigurációk és szkriptek zsh
.
- Az 1. rész: A zsh-ra való áttérés (ez a cikk)
- 2. rész: Konfigurációs fájlok
- 3. rész: Shell beállítások
- 4. rész: Aliasok és funkciók
- 5. rész: Kiegészítések
- 6. rész: A
zsh
prompt testreszabása - 7. rész: Különlegességek
- 8. rész: Scripting
zsh
zsh
(azt hiszem, hogy zee-shellnek ejtik, bár a zish-t vicces kimondani) lesz a bash
utódja, mint az alapértelmezett shell. A bash
a Mac OS X 10.3 Panther óta az alapértelmezett shell.
Ez a sorozat könyvvé nőtte ki magát: átdolgozva és bővítve, több részletességgel és témával. A többi könyvemhez hasonlóan azt tervezem, hogy a megjelenés után is frissítem és kiegészítem, hogy továbbra is aktuális és hasznos maradjon. Már megrendelhető az Apple Books Store-ban.
Miért?
A macOS-hez csomagolt bash
bináris már régóta a 3.2-es verziónál ragadt. A bash
v4 2009-ben jelent meg, a bash
v5 pedig 2019 januárjában. Az Apple azért nem váltott át ezekre az újabb verziókra, mert GPL v3-as licenccel rendelkeznek. A bash
v3 még mindig GPL v2.
zsh
ezzel szemben “MIT-szerű” licenccel rendelkezik, ami az Apple számára sokkal szimpatikusabbá teszi, hogy alapértelmezés szerint beépítse a rendszerbe. A zsh
már régóta elérhető, mint a macOS-ben. A macOS 10.14 Mojave-en lévő zsh
verzió meglehetősen új (5.3). macOS 10.15 Catalina a jelenlegi zsh
5.7.1.
Is bash gone!?
Nem.
macOS Catalina még mindig ugyanazt a /bin/bash
(3.2.57 verzió) használja, mint a Mojave és korábbi macOS verziók. Ez a változás csak a macOS Catalina rendszeren létrehozott új fiókokra vonatkozik. Catalinára történő frissítéskor a felhasználó alapértelmezett héja marad a korábbi.
A macOS, a kezelőrendszerek, valamint az Apple és harmadik féltől származó telepítők számos szkriptje támaszkodik a /bin/bash
-ra. Ha az Apple csak kirántotta ezt a bináris állományt a macOS 10.15 Catalina vagy akár a 10.16. Sok telepítő és egyéb megoldás tönkremenne és egyszerűen nem működne.
Azok a felhasználók, akiknek a Catalina rendszeren a /bin/bash
az alapértelmezett shell, minden Terminal munkamenet elején egy promptot fognak látni, amely szerint mostantól a zsh
az ajánlott alapértelmezett shell. Ha továbbra is a /bin/bash
-t szeretné használni, elnyomhatja ezt az üzenetet a .bash_profile
vagy .bashrc
környezeti változó beállításával.
export BASH_SILENCE_DEPRECATION_WARNING=1
A bash újabb verzióját maga is letöltheti és telepítheti. Ne feledje, hogy az egyéni bash telepítések egy másik könyvtárban, általában a /usr/local/bin/bash
.
A bash a végtelenségig megmarad?
Az Apple erősen üzeni, hogy váltani kell héjat. Ez eltér a legutóbbi váltástól a Mac OS X 10.3 Pantherben, amikor az Apple az alapértelmezettet bash
-re váltotta, de nem igazán érdekelte, ha a tcsh
-en maradtál. Valójában a tcsh
még mindig jelen van a macOS-en.
Az Apple üzeneteinek azt kellene mondania, hogy a /bin/bash
napjai meg vannak számlálva. Valószínűleg nem mostanában, de előbb-utóbb a bash
több mint tízéves verziójának a rendszerben tartása teherré válik. A beépített bash-t 2014-ben kellett foltozni a ‘Shellshock’ sebezhetőség mérséklése érdekében. Egy bizonyos ponton az Apple túl magasnak fogja tartani a folyamatos karbantartás költségeit.
Egy másik támpont az, hogy a macOS Catalinán megjelent egy új shell (és a támogatási cikkben meg is említik). A ‘Debian Almquist Shell’ dash
került a héjak sorába. A dash
a Posix szabványos héj sh
minimális implementációja. Eddig a macOS-ben (beleértve a Catalinát is) a sh
a bash
-et hívja meg sh
-kompatibilitási módban.
Amint az Apple támogatási cikke említi, a Catalina egy új mechanizmust is hozzáad a felhasználók és adminok számára, hogy megváltoztassák, melyik shell kezelje a sh
meghívásokat. A MacAdminok vagy a felhasználók megváltoztathatják a /var/select/sh
-ben tárolt szimbolikus linket, hogy az a /bin/bash
-tól eltérő héjra mutasson. Ez megváltoztatja, hogy melyik shell értelmezi a #!/bin/sh
shebang vagy a sh -c
segítségével meghívott szkripteket. A sh
értelmezőjének megváltoztatása nem kell, de megváltoztathatja a rendszerben, a kezelőeszközökben és a telepítőkben lévő számos kulcsfontosságú szkript viselkedését, de tesztelési célokra nagyon hasznos lehet.
Mindezek a változások azt jelzik, hogy az Apple arra készül, hogy valamikor, egyelőre meghatározhatatlan időpontban a jövőben eltávolítsa a /bin/bash
-t.
Meg kell várnom, hogy a Catalina átálljon a zsh-re?
Nem, a zsh
elérhető a Mojave és a régebbi macOS verziókon. Elkezdheti a zsh
tesztelését, vagy akár máris átállíthatja az alapértelmezett shelljét.
Ha csak látni szeretné, hogyan működik a zsh
, akkor csak nyissa meg a Terminált, és írja be a zsh
:
$ zshMacBook%
A fő változás, amit látni fog, hogy a prompt másképp néz ki. A zsh
a %
karaktert használja alapértelmezett promptként. (Ezt természetesen megváltoztathatod.) A legtöbb navigációs billentyűleütés és egyéb viselkedés ugyanaz marad, mint a bash
-ben.
Ha már most át akarod állítani az alapértelmezett shell-t a zsh
-re, akkor használhatod a chsh
parancsot:
$ chsh -s /bin/zsh
Ez kéri a jelszavadat. Ez a parancs nem az aktuális héjat változtatja meg, hanem az összes újat, ezért zárja be a jelenlegi terminálablakokat és lapokat, és nyisson meg egy újat.
Miben különbözik a zsh?
Az bash
(‘Bourne again shell’ ) parancshoz hasonlóan a zsh
is a ‘Bourne’ héjcsaládból származik. E közös ősök miatt a mindennapi használatban nagyon hasonlóan viselkedik. A legszembetűnőbb változás az eltérő prompt lesz.
A fő különbség a bash
és a zsh
között a konfiguráció. Mivel a zsh
figyelmen kívül hagyja a bash
konfigurációs fájlokat (.bash_profile
vagy .bashrc
), nem lehet egyszerűen átmásolni a testreszabott bash beállításokat a zsh
-be. A zsh
sokkal több lehetőséggel és ponttal rendelkezik a zsh
konfigurációjának és viselkedésének megváltoztatására. A konfigurációs eszközök és témák egész ökoszisztémája létezik oh-my-zsh
néven, ami nagyon népszerű.
zsh
jobb konfigurációt kínál az automatikus kiegészítéshez is, ami sokkal egyszerűbb, mint a bash
-ben.
Egy külön bejegyzést tervezek, amiben leírom, hogyan viheted át (és fordíthatod le) a konfigurációidat a bash
-ből a zsh
-be.
Mi a helyzet a szkriptekkel?
Mivel a zsh
már régóta jelen van a macOS-en, azonnal elkezdheted áthelyezni a szkriptjeidet a bash
-ből a zsh
-be, és nem veszíted el a visszafelé kompatibilitást. Csak ne felejtsd el a shebanget a szkriptjeidben #!/bin/zsh
-ra állítani.
Megnyersz néhány olyan funkciót, ahol a zsh
jobb, mint a bash
v3, mint például a tömbök és az asszociatív tömbök (szótárak).
Egy kivétel van, ahol mostantól a /bin/sh
használatát javasolnám a szkriptjeidhez: a Recovery rendszer nem tartalmazza a /bin/zsh
héjat, még a Catalina bétában sem. Ez még változhat a béta fázisban, vagy akár később is, de akkor még mindig figyelembe kell venned a régebbi macOS telepítéseket, ahol a zsh
biztosan nincs jelen a Recovery-ben.
Ha a szkriptjeidet vagy pkg-jaidat telepítő szkriptekkel együtt tervezed használni Recovery (vagy NetInstall, vagy bootolható USB meghajtó) környezetben, mint például a Twocanoes MDS, installr vagy bootstrappr, akkor nem támaszkodhatsz a /bin/zsh
-ra.
Mivel most már tudjuk, hogy a bash
végül eltűnik, az egyetlen közös választás, ami maradt, az a /bin/sh
.
A telepítőcsomag készítésekor nehéz lehet előre látni az összes olyan kontextust, amelyben telepíteni lehet. Ezért a telepítés előtti és utáni szkriptekhez mostantól a /bin/sh
használatát javasolnám.
Régebben a /bin/bash
használatát ajánlottam minden MacAdminhoz kapcsolódó dologhoz. A /bin/sh
határozottan visszalépést jelent a funkcionalitásban, de a folyamatos támogatás szempontjából ez tűnik a legbiztonságosabb választásnak.
Összefoglaló
Összességében, bár az Apple-től érkező üzenetek nagyon érdekesek, maga a változás kevésbé drámai, mint a szalagcímek. Az Apple nem “cseréli le” a bash
-t zsh
-re, legalábbis egyelőre nem. Összességében át kell gondolnunk és újra kell tanulnunk néhány dolgot, de sokat nyerhetünk azzal is, hogy végre egy tíz éves héjról egy új, modern héjra váltunk!
Következő
A következő részben a zsh
konfigurációs fájljait fogjuk megvizsgálni.