Mitkä ovat käytännölliset erot Bashin ja Zsh: n välillä?

Uutisen kanssa, että Catalina käyttää oletusasetuksena Zsh: ää Bashin sijasta , I ”m Löydän paljon tuloksia, jotka kertovat minulle kytkimestä ja että se saattaa aiheuttaa ongelmia komentosarjojen komentosarjojen kanssa, mutta en ole tarpeeksi perehtynyt Zsh: ään tietämään, mitä nämä ongelmat saattavat olla. se on monimutkaista, mutta olen koskaan käyttänyt Bashia vain macOS: issa ja Linuxissa – kokemusta Zsh: stä ei ole. Voisiko kukaan tarjota yksinkertaisen käytännön vertailun tai erityisiä kompastuskiviä, jotka minun on tiedettävä, jotta voin alkaa työskennellä valmiina uusi kuori, kun Catalina julkaistaan?

Kommentit

  • Kaikki tämä lukema hubbub on paljon tekemistä mitään. Käyttöjärjestelmä määrittää ” oletus ” kuori luodessasi uusia käyttäjiä, ei syytä enempää. Bash ei ole ’ t menossa pois, ja voit käyttää sitä kuorena tai muuna kuorena c tarjotaan tällä hetkellä.
  • Puhuminen sellaisena, joka ’ käytti molempia ja laskeutui bashiin – ainoa asia, joka sai minut todella, syvästi tyytymättömäksi zsh: ään, oli sen päätös rikkoa POSIX-yhteensopivuus, kun standardi kanonisoi epäilemättä huonot suunnittelupäätökset tavoilla, jotka tekivät helpoksi huolimattomuuden virheestä yrittäessä kirjoittaa komentosarjoja, joiden oli oltava yhteensopivia muiden tiukasti POSIX-superset-kuorien kanssa. Valitettavasti tämä ” ainoa asia ” voi olla melko iso. Silti ksh93 ei ole ’ t katoamassa, ja kuka tahansa vakavasti bash ei halua ’ käyttää Apple: n muinaista 3.x-julkaisua.
  • Seurantana – asennettu Catalina eilen, vaihtanut zsh-tiedostoon, tuonut bash_historyn ja kopioinut joitain suosituimmista aliaksistani bash_profile-tiedostosta, mikään ei näytä olevan rikki. Arvosta kaikkien täällä olevien tarjoamia tietoja ja toivottavasti se auttaa myös muita.
  • @CharlesDuffy: Hyvä kommentti. WRT on ” vakava ” ja käyttää bash version 3.2.57(1): Tiedätkö, käyttääkö Apple bash kaikelle ” tärkeälle ” järjestelmälle?

vastaus

Ensinnäkin joitain tärkeitä asioita:

  1. Bash ei mene pois . Jos käytät jo bashia, mikään ei muutu sinulle. Ainoa muutos on, että zsh on oletus kirjautumiskuori uudille tileille, ja silloinkin voit valita sen sijaan bash.
  2. Skriptit eivät vaikuta . Mitä muutoksia on vuorovaikutteiseen käyttöön tarkoitettu kuori, ts. Päätelaitteiden kuori (ja myös muutama muu sisäänkirjautumista käyttävä asia, kuten crontabs). Jos sinulla on komentosarja tiedostossa, jolla on suoritusoikeudet, aloitetaan shebang-rivillä , kuten #!/bin/bash tai #!/bin/sh tai #!/usr/bin/env bash, se ”toimii edelleen täsmälleen kuten aiemmin.
  3. Zsh: n syntaksia ei voida täysin käyttää bashissa , mutta se on lähellä. Monet koodit jatkavat toimintaansa, esimerkiksi tyypilliset aliakset ja toiminnot. Tärkeimmät erot ovat interaktiivisissa määritysominaisuuksissa.

Oletetaan, että harkitset vaihtamista zsh-tiedostoon, mikä on ollut mahdollista jo vuosia, tässä ovat tärkeimmät erot, joita kohtaat. Tämä ei ole tyhjentävä luettelo!

Tärkeimmät erot vuorovaikutteisessa käytössä

Määritystiedostot : bash lukee (pääasiassa) .bashrc ei-sisäänkirjautuvissa interaktiivisissa kuoreissa (mutta macOS käynnistää sisäänkirjautumiskuoren oletusarvoisesti päätelaitteissa), .profile tai sisäänkirjautumisen kuoreissa ja .inputrc. Zsh lukee (pääasiassa) .zshrc (kaikissa interaktiivisissa kuoreissa) ja .zprofile (sisäänkirjautumisen kuoreissa). Tämä tarkoittaa, että mikään bash-mukautuksistasi ei ole voimassa: sinun on siirrettävä ne. Et voi vain kopioida tiedostoja, koska monia asioita on muokattava.

Avainsidonnat käyttävät täysin erilaista syntaksia. Bash käyttää .inputrc ja sisäänrakennettua bind sisäänrakennettua liitettäessä avaimet readline-komennot . Zsh käyttää sisäänrakennettua bindkey sisäistä avainta zle -widgeteihin. . Useimmilla readline-komennoilla on zsh-ekvivalentti, mutta se ei ole aina täydellinen vastaavuus.

Avainsidonnasta puhuen, jos käytät Vi (m): tä pääteeditorina, mutta et komentorivimoodina kuoressa, huomaat, että zsh: n oletusasetuksena on vi muokkaustila, jos EDITOR tai VISUAL on asetettu arvoon vi tai vim . bindkey -e siirtyy emacs-tilaan.

Kysy : bash asettaa kehotteen (pääasiassa) arvosta PS1 , joka sisältää taaksepäin viiva poistuu . Zsh asettaa kehotteen pääasiassa PS1 , joka sisältää prosenttia pakenee . Bash” s PROMPT_COMMAND -toiminnot ovat käytettävissä zsh precmd ja koukkutoiminnot . Zsh: llä on enemmän mukavuusmekanismeja fancy-kehotteiden luomiseen, mukaan lukien -kehoteemekanismi .

Perus komentorivihistoria -mekanismit (navigointi ylös / alas , haku Ctrl + R , historialaajennus !! ja ystävät, viimeinen argumenttihaku Alt + . tai $_) toimivat samalla tavalla, mutta yksityiskohdissa on paljon eroja, liian monta tässä lueteltavaksi. Voit kopioida .bash_history tiedostoon .zsh_history, jos et ole muuttanut tiedostomuotoa muuttavaa komentotulkkivaihtoehtoa.

Viimeistely : molemmat kuoret ovat oletusarvoisesti peruskomennotilassa, joka täydentää enimmäkseen komentojen ja tiedostojen nimiä, ja vaihtavat fancy-tilaan mukaan lukien bash_completion bashilla tai suorittamalla compinit zsh: ssä. Löydät joitain komentoja, jotka bash hoitaa paremmin ja toisia, joita zsh käsittelee paremmin. Zsh on yleensä tarkempi, mutta joskus luopuu siitä, missä bash tekee jotain, mikä ei ole oikein, mutta on järkevää. Komennon mahdollisten täydennysten määrittämiseksi zsh: llä on kolme mekanismia:

Monilla bash ”s shopt -asetuksilla on vastaava setopt tiedostossa zsh.

Zsh doe sn ”t käsittele # kommenttialustana komentoriviltä oletusarvoisesti vain komentosarjoissa (mukaan lukien .zshrc ja vastaavat). Ota vuorovaikutteiset kommentit käyttöön suorittamalla setopt interactive_comments .

Tärkeimmät erot komentosarjoille

(ja tietysti komentorivillä oleville tehokäyttäjille)

Bashissa $foo ottaa arvon foo, jakaa sen välilyönteihin ja korvaa kuvion vastaavuuksien luettelolla jokaiselle välilyönnillä erotetulle osalle, jos se sisältää jokerimerkkejä ja vastaa olemassa olevaa tiedostoa. Saadaksesi vain arvon foo, tarvitset "$foo". Sama koskee komentojen korvaamista $(foo). Zsh: ssä $foo on arvon foo arvo ja $(foo) on osion foo miinus viimeiset uudet rivit, kahta poikkeusta lukuun ottamatta. Jos sana tyhjenee tyhjien noteeraamattomien muuttujien laajentamisen vuoksi, se poistetaan (esim. a=; b=; printf "%s\n" one "$a$b" three $a$b five tulostaa one, tyhjän rivin, three, five). Jättämättömän komennon korvaamisen tulos jaetaan välilyönnissä, mutta paloissa ei käytetä jokerimerkkejä.

Bash -taulukot indeksoidaan välillä 0 – (pituus-1). Zsh-taulukot on indeksoitu yhdestä pituuteen. Kun a=(one two three) on bashissa, ${a[1]} on two, mutta zsh: ssä se ”s one. Jos vain viitat matriisimuuttujaan ilman aaltosulkeita, bashissa saat ensimmäisen elementin, esim. $a on one ja $a[1] on one[1].Tiedostossa zsh $a laajenee ei-tyhjien elementtien luetteloon ja $a[1] ensimmäiseen elementtiin. Samoin bashissa matriisin pituus on ${#a}; tämä toimii myös zsh: ssä, mutta voit kirjoittaa sen yksinkertaisemmin nimellä $#a. Voit asettaa 0-indeksoinnin oletusasetukseksi setopt ksh_arrays ; tämä ottaa käyttöön myös vaatimuksen käyttää aaltosulkeita viittaamaan taulukkoelementtiin.

Bashissa on ylimääräinen jokerimallit , kuten @(foo|bar) vastaamaan foo tai bar, jotka ovat käytössä vain shopt -s extglob -asetuksella. Zsh: ssä voit ottaa käyttöön nämä mallit setopt ksh_glob -ominaisuudella, mutta siellä on myös yksinkertaisempi kirjoittaa natiivi syntaksi , kuten (foo|bar), joista osa vaatii setopt extended_glob (tee laita se .zshrc -kansioon ja se on oletusarvoisesti valmiissa toiminnoissa). **/ rekursiivisen hakemiston läpikäynti on aina käytössä zsh-tiedostossa.

Bashissa oletusarvoisesti, jos jokerimalli ei vastaa mitään tiedostoa, se jää muuttumattomana. Zsh-tiedostossa oletuksena on virhe, joka on yleensä turvallisin asetus. Jos haluat välittää jokerimerkin parametrin komennolle, käytä lainausmerkkejä. Voit vaihtaa bash-käyttäytymiseen valitsemalla setopt no_nomatch . Voit saada ei-yhteensopivat jokerimallit laajentumaan tyhjään luetteloon setopt null_glob .

Bashissa putkilinjan oikea puoli kulkee alikuoressa. Zsh: ssä se kulkee pääkuoressa, joten voit kirjoittaa esimerkiksi somecommand | read output.

Joitakin hienoja zsh-ominaisuuksia

Tässä on muutamia hienoja zsh-ominaisuuksia, joita bashilla ei ole ( ainakaan ilman vakavaa kyynärpäärasvaa). Jälleen kerran tämä on vain valikoima mielestäni hyödyllisimpiä.

Glob-karsinnat sallivat tiedostojen sovittamisen metatietojen, kuten aikaleiman, koon jne. perusteella. Ne mahdollistavat myös tuotoksen säätämisen. Syntaksi on melko salaperäinen, mutta se on erittäin kätevä. Tässä on muutama esimerkki:

  • foo*(.): vain tavalliset tiedostot, jotka vastaavat foo* ja symboliset linkit tavallisiin tiedostoihin, ei hakemistoihin ja muihin erikoistiedostoihin.
  • foo*(*.): vain suoritettavat säännölliset tiedostot, jotka vastaavat foo*.
  • foo*(-.): vain tavalliset tiedostot, jotka vastaavat foo*, eivät symbolisia linkkejä ja muut erikoistiedostot.
  • foo*(-@): vain roikkuvat symboliset linkit, jotka vastaavat foo*.
  • foo*(om): tiedostot, jotka vastaavat foo*, lajiteltu viimeisimmän muokkauspäivän mukaan, viimeisin ensin. Huomaa, että jos välität tämän osoitteeseen ls, se ”suorittaa oman lajittelunsa. Tämä on erityisen hyödyllistä…
  • foo*(om[1,10]): 10 viimeisintä tiedostoa, jotka vastaavat foo*, viimeisimmät ensin.
  • foo*(Lm+1): tiedostot, jotka vastaavat foo* ja joiden koko on vähintään 1 Mt.
  • foo*(N): sama kuin foo*, mutta jos tämä ei vastaa mitään tiedostoa, luo tyhjä luettelo riippumatta null_glob -asetuksen asetuksista (katso yllä).
  • *(D): sovita kaikki tiedostot mukaan lukien pistetiedostot ( paitsi . ja ..).
  • foo/bar/*(:t) (käyttämällä historian muokkaaja ): tiedostot foo/bar, mutta vain tiedoston perusnimi. Esim. jos on a foo/bar/qux.txt, se laajenee nimellä qux.txt.
  • foo/bar/*(.:r): ota tavalliset tiedostot kohtaan foo/bar ja poista laajennus. Esimerkiksi. foo/bar/qux.txt laajennetaan nimellä foo/bar/qux.
  • foo*.odt(e\""REPLY=$REPLY:r.pdf"\"): ota luettelo tiedostoista, jotka vastaavat foo*.odt, ja korvaa .odt sanoilla .pdf (riippumatta siitä, onko PDF-tiedosto tiedosto on olemassa.

Tässä on muutama hyödyllinen zsh-kohtainen jokerimalli .

  • foo*.txt~foobar*: kaikki .txt tiedostot, joiden nimi alkaa foo, mutta ei foobar.
  • image<->.jpg(n): kaikki .jpg -tiedostot, joiden perusnimi on image, jota seuraa numero, esim.image3.jpg ja image22.jpg, mutta ei image-backup.jpg. Glob-määrittelijä (n) aiheuttaa tiedostojen luettelon numerojärjestyksessä, ts. image9.jpg on ennen image10.jpg (voit tehdä tämän oletusarvoksi myös ilman -n kanssa setopt numeric_glob_sort ).

tiedostojen uudelleennimeämiselle , zsh tarjoaa erittäin kätevän työkalu: zmv -toiminto . Ehdotettu: .zshrc:

autoload zmv alias zcp="zmv -C" zln="zmv -L" 

Esimerkki:

zmv "(*).jpeg" "$1.jpg" zmv "(*)-backup.(*)" "backups/$1.$2" 

Bashilla on muutama tapa soveltaa muunnoksia muuttujan arvoa otettaessa . Zsh: llä on joitain samoja ja monia muita .

Zsh: llä on useita vähän käteviä toimintoja hakemistojen muuttamiseen. Ota setopt auto_cd käyttöön vaihtaaksesi hakemistoon kirjoittaessasi sen nimeä ilman, että sinun tarvitsee kirjoittaa cd (bashilla on myös tämä nykyään). Voit käyttää kahden argumentin muotoa muotoon cd vaihtaaksesi hakemistoon, jonka nimi on lähellä nykyistä hakemistoa . Jos esimerkiksi olet /some/where/foo-old/deeply/nested/inside -kohdassa ja haluat siirtyä kohtaan /some/where/foo-new/deeply/nested/inside, kirjoita vain cd old new.

Jos haluat määrittää arvon muuttujalle, kirjoita tietysti VARIABLE=VALUE. Muokkaukseen muuttujan arvo vuorovaikutteisesti, suorita vain vared VARIABLE .

Viimeiset neuvot

Zsh: ssä on määritysrajapinta, joka tukee muutamia yleisimpiä asetuksia, mukaan lukien säilötyt reseptit esimerkiksi kirjainkoon merkitsemättömän loppuun saattamiseksi. Tämän käyttöliittymän (uudelleen) suorittaminen (ensimmäistä riviä ei tarvita, jos käytät määritystiedostoa, jonka muokkaaja on zsh-newuser-install):

autoload -U zsh-newuser-install zsh-newuser-install 

Laatikosta, ilman asetustiedostoa, monet zsh: n hyödyllisistä ominaisuuksista on poistettu käytöstä yhteensopivuuden takaamiseksi 1990-luvun versioiden kanssa. zsh-newuser-install ehdottaa joitain suositeltavia ominaisuuksia, jotka otetaan käyttöön.

Verkossa on monia zsh-määrityskehyksiä (monet niistä ovat Githubissa ). Ne voivat olla kätevä tapa aloittaa joillakin tehokkailla ominaisuuksilla. Kolikon kääntöpuoli on, että ne lukitsevat sinut usein tekemään asioita samalla tavalla kuin kirjoittaja, joten joskus ne ”estävät sinua tekemästä asioita haluamallasi tavalla. Käytä niitä omalla vastuullasi.

zsh-käsikirjassa on paljon tietoa, mutta se kirjoitetaan usein tiukalla ja vaikeasti seurattavalla tavalla, ja siinä on vain vähän esimerkkejä. Älä epäröi etsiä selityksiä ja esimerkkejä verkosta: jos käytät vain zsh, joka on helppo ymmärtää käsikirjassa, menetät. Kaksi hyvää resurssia ovat zsh-käyttäjien postituslista ja Unix Stack Exchange . Laaja artikkelikokoelma zsh-tilaan siirtymisestä Macissa löytyy osoitteesta scriptingosx.com ja hyödyllinen Ruby-komentosarja komentohistorian tuomiseen mukanasi löytyy Githubista.

Kommentit

  • Nyt ’ mietin, toimiiko upea ctrl-o zsh: llä. Tietenkään se ei toimi ’ myöskään Mac OS: ssä bashissa, joten se ’ ei ole oikeastaan merkityksellistä tälle vastaukselle tai sivustolle. En voinut ’ löytää mitään tietoa ctrl-o: sta zsh: ssä nopeasta online-hausta, mutta sitten taas, tiedot bash: n ctrl-o: sta ovat myös epätarkkoja …
  • @Jasper En tiennyt ’ tiennyt, että bashilla oli tämä. Kuvauksen jälkeen Co tekee saman asian zsh-tiedostossa oletusavaimilla.
  • Olin iloinen nähdessäni, että sisällytit ” joitain hienoja zsh-ominaisuuksia ” -osassa ja luki sitä innokkaasti yrittääkseen ymmärtää, miksi Apple olisi voinut päättää siirtyä erittäin yleisestä Bashista paljon vähemmän suosittuun Zsh: ään. En löytänyt ’ mitään yhtään edes etänä pakottavaa perustelemaan kytkintä. Se ’ on ilmeisesti ei-tyhjentävä luettelo, mutta jätitkö pois Zsh: n otsikkoominaisuudet, koska niiden ’ oletetaan olevan ilmeisiä? Mitä minulta puuttuu täällä?
  • @CodyGray En tiedä ’ en tiedä ja Apple ei ole tapana ’ oikeuttamaan itsensä. Sillä voi olla jotain tekemistä sen kanssa, että jos tilanne olisi käännetty, ei ’ ei olisi ”mukavia bash-ominaisuuksia” -osaa.Tai se voi johtua siitä, että viimeinen muu kuin GPLv3-bash vanhenee todella , kun taas zsh: llä on liberaali lisenssi.
  • Ymmärsin, että lisensointi oli pohjimmiltaan ainoa syy. ’ s myös, miksi macOS: n bash on edelleen v3. Sana kadulla on, että bash ei voitu päivittää ’ ja odotetaan, että se poistetaan, ellei loppukäyttäjä asenna sitä panimolla tai tms. Suunnitelmani oli vaihtaa zsh ennemmin kuin myöhemmin macOS: lle, mutta pitää kiinni Debianista tällä hetkellä.

Vastaa

Muuta komentotulkki nyt ja testi – ei tarvitse odottaa.

chsh -s /bin/zsh 

Arvioin myös, että 95% MacOS-käyttäjistä ei käytä komentoriviä, ja niistä, jotka käyttävät, toisen 95%: n ei tarvitse muuttaa mitään merkittävää tai kaikki. (Panostin enemmän kuin 10% 1%: sta, jotka tietävät kuoret, täytyy tehdä muuta kuin siirtää pari riviä .dot-tiedostoissa)

Kehotteesi muuttuu, ja jos muutit kehotetta kohdassa bash, tapa muuttaa sitä kohdassa zsh ei ole vaikeampi eikä vähempää dokumentoitu kuin bash.

Uudemmat kuoret eivät koskaan pääse irti maasta, jos ne rikkovat suuria esineitä tai aiheuttavat tuskallisen sopeutumisajan. Jos haluat perusteellisemman muutoksen ja todella haluat kuoren, sinun on ajateltava sitä ja tarvitset koulutusta ja aikomusta hyväksyä – kokeile kalaa .

Kommentit

  • Olen ristiriidassa fish kanssa. Käytän sitä jo kahden vuoden ajan, mutta joidenkin kopioiden / liimattujen yksirivisten yhteensopimattomuus on väsyttävää. Toisaalta se on erittäin kätevä kuori (automaattiset ehdotukset ilman < kbd > välilehteä < / kbd > ovat erinomaisia)
  • Halusin rakastaa kalaa, haluan silti rakastaa kalaa, mutta minulla on liikaa kuorirakenteita vuosikymmenestä ksh -kohdassa, jotta voit todella jättää tuon taiton. Jätän mielelläni bash taaksepäin ja omaksun täysin zsh: n nyt henkilökohtaisesti.
  • Olen täysin kalojen alla. Se on oikeastaan jälleen yksi Unix-tyyppinen kuori, jossa on vähän vähemmän risteilyä. (Siinä sanotaan kirjaimellisesti ” Lopuksi komentorivikuori 90-luvulle ” etusivulla.) Ainoa uusi kuori, joka Olen nähnyt viime vuosina, että tosiasiallisesti toi jotain uutta (valtavirran) taulukkoon, oli PowerShell, joka valitettavasti rajoittui Windowsiin liian kauan, ja on edelleen rajoitettu .NET: ään. Edelleen ei ole sitä paljon uutta PowerShellissä, jota ’ ei ole jo tehty, esim. DCL: ssä tai JCL: ssä, mutta se on tehty (jonkin verran) hyvällä maulla.
  • @bmike Miksi ei vain käyttää ksh: tä? Apple toimittaa uusimman version. Itse olen lyönyt bashia kauan sitten, enkä näe mitään syytä aloittaa zsh: n käyttöä nyt.
  • Tämä vastaus ei kuvaa ’ t lainkaan bash: n ja zsh: n eroja. … ja en ’ ole aivan varma, miksi määrittämällä, että ” 95% macOS-käyttäjistä ei ’ t käytä komentoriviä ” on merkitystä sellaisen käyttäjän kysymykselle, joka tietysti käyttää bashia.

Vastaa

Shell-komentosarjat eivät todellakaan ole niin monimutkaiset

Onko shell-komentosarjoissasi shebang-viivoja (aloita #! /bin/bash tai vastaavaa)? Jos ei, olet ehkä käyttänyt tahattomasti bash-ominaisuutta, jossa se suorittaa komentosarjoja ilman bashia käyttävää shebangia. Muut kuoret, kuten viiva tai zsh, jättävät sen käyttöjärjestelmään, joka yleensä käyttää sen sijaan /bin/sh. /bin/sh MacOS: ssa on ja todennäköisesti pysyy kopiona tiedostosta /bin/bash, mutta suorittamalla bash nimellä sh aiheuttaa sen erilaisen käyttäytymisen. Yksityiskohdat ovat Bash-käsikirja, 6.11 Bash POSIX-tila . Joitakin kohtia:

  1. Bash varmistaa, että muuttuja POSIXLY_CORRECT on asetettu.

Tämä ympäristömuuttuja voi vaikuttaa useiden muiden työkalujen toimintaan, varsinkin jos GNU-työkaluja on asennettu.

  1. Prosessin korvaaminen ei ole käytettävissä.

Prosessikorvaus on <(...) tai >(...) syntaksia.

  1. Sisäänrakennetut . ja source sisäänrakennetut tiedostot eivät etsi nykyisestä hakemistosta tiedostonimeä. argumentti, jos sitä ei löydy hakemalla polkua.

Joten jos komentosarjasi teki . foo odottaen sen hankkivan nykyisen hakemiston foo -nimisen tiedoston, joka ei toimi. Tee sen sijaan . ./foo.

Kuten voit arvata numeroiden perusteella, bash-käyttäytymisessä POSIX-tilassa on paljon pieniä eroja. Käytä parhaiten shebangia, jos aiot käyttää komentosarjaasi bash.

Kommentit

  • Tarkistettaessa näyttää siltä, että suurin osa kirjoittamistani shell-skripteistä e tai käytä joko nimenomaisesti osiota / bin / bash shebangissa (hyvin harvat niistä) tai osiota / bin / sh (melkein kaikki), jotta ainakaan ei pitäisi olla ongelma. Kiitos.
  • Mielestäni prosessien korvaaminen on nyt mahdollista. Kokeilin sitä myös Catalinalla onnistuneesti. Katso: zsh.sourceforge.net/Intro/intro_7.html
  • @Siu voitti edelleen ’ t-skriptit, jotka käyttävät /bin/sh – tai /bin/bash -sarjaa shebangissa. Zsh on vain oletusarvoinen vuorovaikutteinen kuori, se ei ’ korvannut bashia kaikkialla
  • @muru Ah, ymmärrän. En lukenut vastausta huolellisesti ja ajattelin, että kirjoittaja puhui prosessin korvaamisesta zsh 😅

vastauksessa

Asiat pidetään yksinkertaisina …

Voiko kukaan antaa yksinkertaisen käytännön vertailu tai erityiset kompastuskivet, jotka minun on tiedettävä, jotta voin alkaa työskennellä valmiina uuteen kuoreen, kun Catalina vapautetaan?

Jos Ajattelet uuden oletuskuoren käyttämistä.

  • Jos haluat antaa Zsh: lle pyörteen ja tuntea joitain eroja muuttamatta koneen kuoriasetuksia, sinun on voi kokeilla Powerline10k Docker-astiassa ja nähdä, onko se sinun kupillinen teetä.
  • Jos et tarvitse kaikkia kelloja ja viheltää ja käytä Bashia vain perusohjelmiin, on melko helppo asettaa kuori, kuten muut täällä selittävät. Ja jos päätät haluat käyttää -ominaisuuksia Bash 5: ssä , se ”on melko triviaali päivitys macOS: lle .
  • Jos haluat parantaa komentosarjojesi siirrettävyyttä, jotta ne todennäköisesti toimisivat odotetusti molemmissa kuoreissa, testaa niiden POSIX-yhteensopivuus ja poista kaikki ”basismit”. Olen käyttänyt tähän ShellCheck -sovellusta, ja se toimii melko hyvin vähemmän monimutkaisissa komentosarjoissa.

Vaikka mitään tiettyä polkua ei ole selvä näiden kolmen lähestymistavan pitäisi antaa sinulle riittävästi itseluottamusta tehdä tietoinen päätös ilman, että suunnittelet ongelmaa tai ratkaisutilaa enemmän.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *