žuvis vs zsh


Atsakymas 1:

Geriau už ką?

Kokie yra tavo kriterijai?

Asmeniškai aš siūlau

bash

nes jis yra numatytasis „Linux“ ir „MacOS X“ sistemose ir lengvai prieinamas visose kitose „Unix“ formose ir naudojant „MS Windows“ per

Cigvinas

ir yra numatytasis

„Microsoft ™ Windows“ paslaugos, skirtos „Linux“

(Ubuntu

bash

palaikomasis sluoksnis / posistemis).

Iš esmės tai yra mažiausio pasipriešinimo kelias, jei per daugelį metų naudositės įvairiomis sistemomis ... ir dažnai turėsite prieigą prie naujai pakeistų sistemų ar naujų paleistų egzempliorių su minimaliais nukrypimais nuo OS bazės (kaip yra įprasta mastelio internete / programų serverių fermos). Tai pakankamai arti „Korn“ apvalkalo, kad mažai žmonių ras kampinius atvejus, kai jie skiriasi semantika. (Daugelis vartotojų nepastebės skirtumo tarp mažiau minimalių „Bourne“ apvalkalo klonų, tokių kaip pelenai ir brūkšnys, ir funkcijų, kurias prideda bashas, ​​dar mažiau sugebės atskirti ksh ir bash skirtumus.

„zsh“ yra turbūt galingiausias ir labiausiai pritaikomas. Tai labiausiai tinka tiems, kurie yra labai aistringi naudoti ir pritaikyti savo apvalkalą. Neigiama jo naudojimo dalis su visais patobulinimais ir pritaikymais yra ta, kad vartotojui, esant derinimo problemoms sistemose, kuriose „zsh“ (dar) neįdiegta, gali būti nusivylęs kažkokio kito apvalkalo naudojimu. Ops / sysadmins žmonės šiuolaikinėje aplinkoje tai daro gana dažnai. Tai taip pat gana nesmagu dirbant su kolegomis ar auklėjant juos ir bandant jiems parodyti ką nors savo apvalkalo eilutėje arba dalijantis su jais GNU ekranu ar „tmux“ sesija.

„Korn“ apvalkalas, „ksh“, yra geresnis scenarijaus apvalkalas nei trumpas aprašymas keliomis smulkiomis detalėmis ... bet nepakanka, kad būtų verta jį parsisiųsti, įdiegti ir konfigūruoti visur.

„ksh“ daugelį metų palaikė „asociatyvinius masyvus“ (maišos / žodynus), kol bashas jį pridėjo. (Jis buvo pridėtas prie bash tik prieš kelerius metus, vis dar neįtrauktas į versijas, kurios, pavyzdžiui, numatytos „MacOS X“). Taigi paprastai geriau apvalkalo scenarijuose paprasčiausiai nenaudoti asociatyvinių masyvų. Jei manote, kad norite jo funkcijų, tada paprastai geriau perjungti į Python, Ruby, Perl, TCL / wish arba bet kurią iš kitų bendrosios paskirties scenarijų kalbų. Tiesiog nėra tiek daug, ką galima gauti perjungiant į kitą apvalkalą (atsižvelgiant į eksploatacines pridėtines dalis) tik dėl šios vienos funkcijos.

Tą patį galima pasakyti ir apie

ksh

Bendri procesai

.

Vienintelis pastebimas skirtumas yra tas, kurį reikia paaiškinti. Apsvarstykite šią apvalkalo komandą:

nenustatytas foo; aido juosta | skaityti foo; echo "$ foo"

Tai puikiai tinka bet kuriame „Bourne“ suderinamame apvalkale. Bet ji elgsis skirtingai pagal įvairius apvalkalus. Tai arba išmes eilutę „juosta“ (ir naują eilutę), arba išduos tik tuščią eilutę.

bash atliks pastarąjį, o ksh ir zsh atliks ankstesniu būdu. Dabartiniame apvalkale bus nustatytas „foo“ apvalkalo kintamasis. Mano manymu, tai yra geriausia semantika.

Bet tai yra kampinis atvejis. Kiek žinau, „Unix“ apvalkalo „Posix“ specifikacijos jos neapima; taigi tai, kad elgesys priklauso nuo diegimo, nėra klaida. Tai yra tik kažkas, ką apvalkalo ekspertas turi žinoti ir išbandyti arba su juo susitvarkyti.

Tokio elgesio priežastis yra ta, kad apvalkalo „vamzdžio“ operatorius yra tarpprocesinis ryšio mechanizmas. Apvalkalas turi sukurti antrinį lukštą, tai yra antrinį procesą, paleidžiantį savo pirminio proceso atminties kopiją. Tačiau bet koks įgyvendinimas gali išnaikinti komandą ir paleisti dalį prieš vamzdžio simbolį (į kairę nuo jo) subhell'e (kaip padaryta ksh ir zsh) arba po (dešinėje) vamzdžio (kaip padaryta bash). , labai senos „ksh“ versijos (iki 1983 m. išleidimo?) ir senesnis „Bourne“ apvalkalas bei dauguma jo klonų, tokių kaip pelenai ir brūkšnys.

Vienas iš būdų yra komandų grupavimas, siekiant užtikrinti, kad visos komandos po vamzdžiu būtų „apimties“ su įmontuotu skaitymu:

nenustatytas foo; aido juosta | {skaityti foo; echo „$ foo“; }

(Beje, šiame pavyzdyje aprašoma subtili klaida, egzistavusi bash prieš 1.4 ir kuri buvo ištaisyta po to; analizatorius naudojo {} simbolius ir žetonus, panašiai kaip () (skliausteliuose). Taigi jis toleruodavo, kad neišleido kabliataškis po mano aido „$ foo" - tai iš esmės buvo nukrypimas nuo specifikacijos. Problema ta, kad milijonai žmonių naudojosi bash ir rašė scenarijus remdamiesi prielaida, kad jiems nereikia nutraukti komandos prieš uždarant. petnešomis - kabliataškiu ar nauja eilute. Taigi kai kurie iš šių senų apvalkalo scenarijų vis dar parodo šią klaidą praėjus daugiau nei dešimtmečiui ir yra tik keli žmonės, kurie pakankamai gerai žino apvalkalą, kad jį pastebėtų ir ištaisytų).

Kalbant apie interaktyvų naudojimą, „bash“ yra akivaizdžiai pranašesnis už „ksh“, tačiau tikriausiai nėra visiškai panašus į „zsh“ visiems, kurie įsipareigotų mokytis ir naudoti labai keblius patobulinimus ir tinkinimus.

bash palaiko programuojamą [Tab] užbaigimą ir GNU readline bibliotekas, skirtas ypač lanksčiam klaviatūros sujungimų valdymui, komandų eilutės redagavimui ir prieigai prie komandų istorijos. „ksh“ turi gana ribotą komandą „fc“ (kurią palaiko ir bash) jūsų „taisymo komandai“ - tai yra, norint pasirinkti elementus iš savo istorijos, surinkti juos į norimą teksto rengyklę ir automatiškai vykdyti redaguoto laikinojo failo turinį išeinant. .

Bet bash palaiko tai ir tai yra jo paties emacs ar vi prieigos prie redagavimo ir redagavimo priemonės, ir senasis csh! (sprogimo) operatoriai taip pat.

„bash support vi“ redagavimo režimas (rinkinys „-o vi“), kuris, jei teisingai prisimenu, buvo numatytasis „ksh 93“. Bet „bash“ numatytasis nustatymas yra „emacs“ režimas (nustatytas „-O emacs“). Be to, be abejo, taip pat galite naudoti komandą bash bind, norėdami iš naujo surišti bet kuriuos klavišus prie daugelio redagavimo ir istorijos tvarkymo funkcijų arba į makrokomandas, išskleidžiamas į bet kurį tekstą, kurį galbūt norėsite įvesti į komandų eilutę.

Papildomai

bash

turi daug „stebuklingų“ aplinkos kintamųjų, kurie gali padaryti dalykus, kurie beveik neįsivaizduojamai subtilūs ir painūs. Pvz., Galite nustatyti

PROMPT_COMMAND

kintamasis, norint kiekvieną kartą vykdyti pasirinktinį kabliuką

bash

ketina pristatyti savo greitą. Taigi jūs galėjote patikrinti, ar nėra magijos .dot_file

ir iš naujo tinkinkite vykdomą apvalkalą, atsižvelgiant į tai, kuriame kataloge esate, arba nustatykite eilutės ir terminalo ekrano spalvas pagal dienos laiką, arba pateikite užklausą kuriai nors svetainei ir automatiškai vykdykite komandą, pagrįstą ... beveik bet kuo.

(Aš naudojau tą kabliuką automatiškai suaktyvinti „Python“ virtualiąsias aplinkas, paprasčiausiai perjungdamas į jų veikiantį katalogą).

Kai manote, kad tcsh (arba jo protėvis, csh), jūs esate šiek tiek nišoje. Įprasta matyti CSH scenarijus EDA (elektroninio projektavimo automatizavimo) srityje. Bet tai yra atsitiktinumas istorijoje ir dauguma toje srityje dirbančių žmonių interaktyviam naudojimui nenaudoja tcsh.

žuvis

apvalkalas taip pat yra niša. Niekada nenaudojau jo pakankamai, kad susidaryčiau nuomonę apie ją, ir jis tikrai yra pakankamai spalvingas. Bet aš manau, kad prieš pradedant kultivuoti tikrai plačiai paplitusią kultūrą, bus labai sunki eilė kapoti. Jei „Apple ™“ nepradės jos pristatyti kaip numatytąją „Mac ™“ sistemų apvalkalą, ji greičiausiai pasmerkta artimiausioje ateityje išlikti savo nišoje.

Taigi tikiuosi, kad aš pasisakiau. Tikrai nėra prasmės klausti „kas yra geriausia ...“ (beveik bet koks dalykas, kai yra pagrįstų alternatyvų).

„Unix“ komandų apvalkalų atveju skirtumai tarp „Bourne“ suderinamų apvalkalų yra tokie maži, kad tik ekspertai gali juos atskirti, o tie turi kompromisų ir galų gale tampa gana subjektyviomis nuostatomis. Aš turiu kolegų, kurie aistringai žiūri į savo „zsh“ parametrus, ir kitų, kuriems tai tiesiog rūpi. Aš kažkur esu prisitaikęs prie lengviausiai prieinamo pasirinkimo.


Atsakymas 2:

Panašu, kad daugeliu atvejų greičiausiai tiesiog laikysitės „Bash“, o tai greičiausiai tai, ką turite kaip numatytąjį. Bet jūs galite turėti priežastį pereiti prie:

  • Žuvis (draugiškas interaktyvus apvalkalas) - lengva išmokti ir naudoti, naudojant nuoseklią sintaksę, gražų skirtuko pildymą ir sintaksės paryškinimą.
  • „Zsh“ - „Bourne“ pagrindu ir suderinamas su „Bash“, tačiau turi daugiau funkcijų.
  • „Tcsh“ - patobulinta „Csh“ versija, tačiau ji gali būti ne pats geriausias scenarijų pasirinkimas.

Peržiūrėkite visą straipsnį, kuris gilinasi į:

Geriausios „Linux“ apvalkalai

Atsakymas 3:

Tai priklauso nuo to, kam norite jį naudoti.

Jei tai yra programavimui, jūs norite apvalkalo, turinčio nepaprastai pajėgią duomenų struktūrą ir gerą našumą. Jei norite platinti savo programas kitiems vartotojams / sistemoms, geriau naudokite populiarųjį apvalkalą, kuris greičiausiai bus įdiegtas kitose sistemose.

Jei jis skirtas interaktyviam naudojimui, norite apvalkalo, kuris turėtų gerą automatinį užbaigimą, istorijos mechanizmus ir būtų lengvai pritaikomas.

Asmeniškai aš naudoju žuvis interaktyviai ir bash vykdydamas scenarijus (nors bash yra gana lėtas, aš turėčiau naudoti ksh).