Siirtyminen zsh:hen
Apple on ilmoittanut, että macOS 10.15 Catalinassa oletusarvoinen komentotulkki on zsh
.
Tässä sarjassa dokumentoin kokemukseni bash
-asetusten, konfiguraatioiden ja skriptien siirrosta zsh
.
- Osa 1: Siirtyminen zsh:hen (tämä artikkeli)
- Luku 2: Konfiguraatiotiedostot
- Luku 3: Shell-asetukset
- Luku 4: Aliasit ja funktiot
- Luku 5: Täydennykset
- Luku 6: Komentokehotteen
zsh
mukauttaminen - Luku 7: Sekalaiset asiat
- Luku 8: Scripting
zsh
zsh
(uskon, että se lausutaan zee-shell, vaikka zish on hauska sanoa) tulee seuraamaan bash
:tä oletusarvoisena komentotulkkina. bash
on ollut oletusarvoinen komentotulkki Mac OS X 10.3 Pantherista lähtien.
Tästä sarjasta on kasvanut kirja: se on muokattu ja laajennettu yksityiskohtaisemmaksi ja aiheita on lisätty. Kuten muitakin kirjojani, aion päivittää ja täydentää sitä myös julkaisun jälkeen pitäen sen ajankohtaisena ja hyödyllisenä. Voit tilata sen nyt Apple Books Storesta.
Miksi?
MacOS:n kanssa niputettu bash
-binääri on ollut jumissa versiossa 3.2 jo pitkään. bash
v4 julkaistiin vuonna 2009 ja bash
v5 tammikuussa 2019. Syy, miksi Apple ei ole siirtynyt näihin uudempiin versioihin, on se, että ne on lisensoitu GPL v3:lla. bash
v3 on edelleen GPL v2.
zsh
taas on ”MIT:n kaltainen” lisenssi, mikä tekee siitä Applelle paljon miellyttävämmän sisällyttää se järjestelmään oletuksena. zsh
on ollut saatavilla macOS:ssä jo pitkään. MacOS 10.14 Mojaven zsh
-versio on melko uusi (5.3). macOS 10.15 Catalinassa on nykyinen zsh
5.7.1.
Onko bash poissa!?
Ei.
macOS Catalinassa on edelleen sama /bin/bash
(versio 3.2.57) kuin Mojavessa ja aiemmissa macOS-versioissa. Tämä muutos koskee vain macOS Catalinalla luotuja uusia tilejä. Kun päivität Catalinaan, käyttäjän oletustulkki säilyy entisellään.
Monet macOS:n skriptit, hallintajärjestelmät sekä Applen ja kolmansien osapuolten asennusohjelmat tukeutuvat /bin/bash
:een. Jos Apple vain nykäisi tämän binäärin macOS 10.15 Catalinassa tai jopa 10.16:ssa. Monet asennusohjelmat ja muut ratkaisut rikkoutuisivat ja yksinkertaisesti lakkaisivat toimimasta.
Käyttäjät, joilla on Catalinassa oletusarvoinen komentotulkki /bin/bash
, näkevät jokaisen terminaali-istunnon alussa kehotteen, jossa ilmoitetaan, että zsh
on nyt suositeltu oletuskomentotulkki. Jos haluat jatkaa /bin/bash
:n käyttöä, voit tukahduttaa tämän viestin asettamalla ympäristömuuttujan .bash_profile
tai .bashrc
.
export BASH_SILENCE_DEPRECATION_WARNING=1
Voit myös itse ladata ja asentaa uudemman version bashista. Muista, että mukautetut bash-asennukset sijaitsevat eri hakemistossa, yleensä /usr/local/bin/bash
.
Pysyykö bash loputtomiin?
Apple kehottaa vahvasti vaihtamaan kuorta. Tämä eroaa viimeisimmästä vaihdosta Mac OS X 10.3 Pantherissa, jolloin Apple vaihtoi oletusarvoksi bash
, mutta ei oikeastaan välittänyt siitä, jos jäit tcsh
:een. Itse asiassa tcsh
on edelleen läsnä macOS:ssä.
Applen viestien pitäisi kertoa meille, että /bin/bash
:n päivät ovat luetut. Todennäköisesti ei kovin pian, mutta lopulta yli kymmenen vuotta vanhan bash
-version pitäminen järjestelmässä muuttuu rasitteeksi. Sisäänrakennettu bash jouduttiin paikkaamaan vuonna 2014 ’Shellshock’-haavoittuvuuden lieventämiseksi. Jossain vaiheessa Apple pitää jatkuvan ylläpidon kustannuksia liian suurina.
Toinen vihje on, että macOS Catalinaan ilmestyi uusi komentotulkki (ja se mainitaan tukiartikkelissa). ’Debian Almquist Shell’ dash
on lisätty kuorien joukkoon. dash
on suunniteltu minimaaliseksi toteutukseksi Posix-standardin mukaisesta komentotulkista sh
. Toistaiseksi macOS:ssä (Catalina mukaan lukien) sh
kutsuu bash
:tä sh
-yhteensopivuustilassa.
Kuten Applen tukiartikkelissa mainitaan, Catalina lisää myös uuden mekanismin, jolla käyttäjät ja ylläpitäjät voivat vaihtaa, mikä komentotulkki käsittelee sh
:n kutsuja. MacAdminit tai käyttäjät voivat muuttaa osoitteeseen /var/select/sh
tallennetun symbolisen linkin osoittamaan muuhun komentotulkkiin kuin /bin/bash
. Tämä muuttaa sitä, mikä komentotulkki tulkitsee skriptejä, joissa on #!/bin/sh
shebang tai skriptejä, joita kutsutaan sh -c
:lla. Tulkin sh
muuttamisen ei pitäisi, mutta se voi muuttaa useiden tärkeiden skriptien käyttäytymistä järjestelmässä, hallintatyökaluissa ja asennusohjelmissa, mutta se voi olla erittäin hyödyllistä testausta varten.
Kaikki nämä muutokset ovat merkkejä siitä, että Apple valmistautuu poistamaan /bin/bash
:n joskus, vielä määrittelemättömänä ajankohtana tulevaisuudessa.
Pitäisikö minun odottaa Catalinan siirtymistä zsh:hen?
Ei, zsh
on käytettävissä Mojavessa ja vanhemmissa macOS-versioissa. Voit aloittaa zsh
:n testaamisen tai jopa vaihtaa oletuskomentosuorittimen jo nyt.
Jos haluat vain nähdä, miten zsh
toimii, voit vain avata Terminalin ja kirjoittaa zsh
:
$ zshMacBook%
Pääasiallinen muutos, jonka näet, on se, että kehote näyttää erilaiselta. zsh
käyttää %
-merkkiä oletuskehotteena. (Voit tietysti vaihtaa sen.) Useimmat navigointinäppäinpainallukset ja muut käyttäytymismallit pysyvät samoina kuin bash
:ssä.
Jos haluat jo vaihtaa oletuskomentotulkkisi zsh
:ksi, voit käyttää komentoa chsh
:
$ chsh -s /bin/zsh
Tämä kysyy salasanasi. Tämä komento ei vaihda nykyistä komentotulkkia, vaan kaikkia uusia, joten sulje nykyiset terminaali-ikkunat ja välilehdet ja avaa uusi.
Miten zsh eroaa?
Kuten myös bash
(’Bourne again shell’ ), zsh
on lähtöisin ’Bourne’-komentotulkkien perheestä. Tämän yhteisen esi-isän vuoksi se käyttäytyy hyvin samankaltaisesti päivittäisessä käytössä. Ilmeisin muutos on erilainen kehote.
bash
:n ja zsh
:n suurin ero on konfiguroinnissa. Koska zsh
ei huomioi bash
:n konfiguraatiotiedostoja (.bash_profile
tai .bashrc
), et voi yksinkertaisesti kopioida räätälöityjä bash-asetuksia zsh
:ään. zsh
:ssä on paljon enemmän vaihtoehtoja ja kohtia muuttaa zsh
:n konfiguraatiota ja käyttäytymistä. On olemassa kokonainen ekosysteemi konfiguraatiotyökaluja ja teemoja nimeltä oh-my-zsh
, joka on hyvin suosittu.
zsh
tarjoaa myös paremmat konfiguraatiot automaattiselle täydennykselle, joka on paljon helpompaa kuin bash
:ssä.
Suunnittelen erillistä postausta, jossa kuvataan, miten voit siirtää (ja kääntää) konfiguraatioitasi bash
:stä zsh
:een.
Mitä skriptien tekemisestä?
Koska zsh
on ollut läsnä macOS:ssä jo pitkään, voisit aloittaa skriptiesi siirtämisen bash
:stä zsh
:iin heti, etkä menetä taaksepäin yhteensopivuutta. Muista vain asettaa shebang skripteissäsi muotoon #!/bin/zsh
.
Saat joitakin ominaisuuksia, joissa zsh
on parempi kuin bash
v3, kuten matriisit ja assosiatiiviset matriisit (sanakirjat).
On yksi poikkeus, jossa suosittelisin nyt käyttämään skripteissäsi /bin/sh
:aa: Recovery-järjestelmässä ei ole /bin/zsh
-kuorta, ei edes Catalinan beta-versiossa. Tämä voi vielä muuttua beta-vaiheen aikana, tai jopa myöhemmin, mutta silloin on silti otettava huomioon vanhemmat macOS-asennukset, joissa zsh
ei varmasti ole Recoveryssä.
Jos aiot käyttää skriptejäsi tai pkg:siä asennusskriptien kanssa Recovery- (tai NetInstall-, tai boottaavan USB-aseman) kontekstissa, kuten Twocanoes MDS:ssä, installr:ssä tai bootstrappr:ssä, silloin et voi luottaa /bin/zsh
:aan.
Koska nyt tiedämme, että bash
on lopulta poistumassa, ainoaksi yleiseksi vaihtoehdoksi jää /bin/sh
.
Kun rakennat asennuspakettia, voi olla vaikeaa ennakoida kaikkia konteksteja, joissa sitä saatetaan käyttää. Suosittelen siis asennuksen esi- ja jälkiasennusskripteissä käyttämään tästä lähtien /bin/sh
:a.
Suosittelin ennen käyttämään /bin/bash
:a kaikkeen MacAdminiin liittyvään. /bin/sh
on ehdottomasti askel alaspäin toiminnallisuudessa, mutta se vaikuttaa turvallisimmalta valinnalta jatkuvan tuen kannalta.
Yhteenveto
Kaiken kaikkiaan, vaikka Applen viestit ovat erittäin mielenkiintoisia, itse muutos ei ole yhtä dramaattinen kuin otsikot. Apple ei ole ”korvaamassa” bash
:tä zsh
:llä, ainakaan vielä. Kaiken kaikkiaan joudumme miettimään ja opettelemaan uudelleen muutamia asioita, mutta on myös paljon hyötyä siitä, että voimme vihdoinkin vaihtaa kymmenen vuotta vanhasta komentotulkista uuteen moderniin komentotulkkiin!
Seuraava
Seuraavassa osassa tarkastelemme konfigurointitiedostoja zsh
:n osalta.