A zsh-ra való áttérés

nov 28, 2021
admin

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.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.