Siirtyminen zsh:hen

marras 28, 2021
admin

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’ ), zshon 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.

Vastaa

Sähköpostiosoitettasi ei julkaista.