Molemmat kuoret tarjoavat tehokkaita komentosarjakieliä, mutta ne eivät ole täysin yhteensopivia.

Unixin kaltaisissa käyttöjärjestelmissä komentotulkkien komentosarjoissa hallitsee kaksi komentotulkkia: Bash (Bourne Again Shell) ja Zsh (Z Shell). Jos olet ohjelmoija tai järjestelmänvalvoja, valinta näiden kahden välillä vaikuttaa merkittävästi tehokkuuteen ja tuottavuuteen.

Näiden kahden kuoren välisten erojen ja yhtäläisyyksien ymmärtäminen auttaa sinua optimoimaan komentorivin työnkulkusi. Kunkin kuoren vivahteiden tunteminen auttaa sinua tekemään tietoisia päätöksiä.

Mitä ovat Bash ja Zsh?

Bash on suosittu sekä Linux- että macOS-järjestelmissä. Se on tehokas työkalu, jonka avulla voit olla vuorovaikutuksessa käyttöjärjestelmän kanssa ja suorittaa komentoja. Voit myös käytä Bashia shell-komentosarjaan, joka automatisoi tehtävät kirjoittamalla skriptejä, jotka sisältävät useamman kuin yhden komennon.

Zsh (Z-kuori) on laajennettu versio Bashista, jossa on paljon enemmän ominaisuuksia. Se on macOS: n oletuskuori. Se on myös tulossa yhä suositummaksi Linux-järjestelmissä.

instagram viewer

Kuinka vaihtaa Bashista Zsh: hon

Jos käytät Linux-järjestelmää ja haluat vaihtaa Zsh: hen, aloita käyttämällä paketinhallintaasi sen asentamiseen. Käytä esimerkiksi Debianissa tai Ubuntussa seuraavaa komentoa:

sudo apt install zsh

Kun olet asentanut sen järjestelmääsi, vaihda siihen suorittamalla seuraava komento:

chsh -s $(which zsh)

Jos käytät macOS: ää, Zsh on jo asennettu. Vaihda siihen suorittamalla seuraava komento:

chsh -s /bin/zsh

Vaihda takaisin Bashiin korvaamalla Zsh yllä olevissa komennoissa Bashilla.

Voit tarkistaa käyttämäsi kuoren suorittamalla seuraavan komennon:

echo $SHELL

Tämä auttaa sinua varmistamaan, että käytät aiottuun komentotulkkia.

Erot Zsh: n ja Bashin välillä

Zsh: n ja Bashin välillä on useita eroja. Näiden erojen huomioon ottaminen auttaa sinua päättämään, mikä kuori sopii sinulle parhaiten.

1. Nopea räätälöinti

Zsh tarjoaa helpomman tavan mukauttaa kehotteitasi käyttämällä %-pohjaiset pakosarjat. Tämä mahdollistaa dynaamiset kehotteet väreillä ja tiedoilla. Voit mukauttaa komentotulkkikehotetta määrittämällä PS1 (Ensisijainen kehote).

PS1="%F{green}%n@%m %F{blue}%~ %f$ "

Yllä oleva mukautettu kehote näyttää käyttäjänimen, isäntänimen ja nykyisen hakemiston eri väreissä:

On olemassa monia muita tapoja mukauttaa Zsh-kehotetta, jonka avulla voit asettaa järjestelmänvalvojan ilmaisimen, sisällyttää päivämäärän ja kellonajan sekä tallentaa uuden kehotteen.

Bash käyttää hieman erilaista lähestymistapaa nopeaan mukauttamiseen. Se käyttää estokoodeja väri- ja muotoilumuutosten määrittämiseen kehotteessa. Saavuttaaksesi samat mukautukset kuin yllä oleva Zsh, voit käyttää seuraavaa mukautettua kehotetta.

PS1="\[\033[32m\]\u@\h \[\033[34m\]\w \[\033[0m\]\$ "

Käyttämällä \[\033[0m\] on ratkaisevan tärkeä, koska se varmistaa, että värimuutokset eivät vaikuta kehotteen jälkeen tulevaan tekstiin.

2. Tuki assosiatiivisille taulukoille

Zsh tukee natiivisti assosiatiivisia taulukoita. Nämä taulukot tarjoavat kätevän tavan yhdistää tietoja, mikä tekee tietojen järjestämisestä ja hakemisesta helppoa. Käyttää julistaa-A komento, joka ilmoittaa assosiatiivisen taulukon:

# Declare an associative array in Zsh 
declare -A my_assoc_array

Voit sitten määrittää assosiatiiviselle taulukolle arvot:

my_assoc_array=(key1 value1 key2 value2) 

Ja lopuksi, käytä arvoja niiden avaimilla:

echo $my_assoc_array[key1] # Outputs: value1

Bash on sisällyttänyt alkuperäisen tuen assosiatiivisille taulukoille versiosta 4.0 lähtien. Ilmoitat ja määrität arvot samalla tavalla kuin Zsh: ssa. Mutta kun on kyse taulukon arvojen käyttämisestä, sinun on käärittävä avain kiharaisiin hakasulkeisiin:

echo "${my_assoc_array[key1]}" 

Suurin ero on, että Zsh: n tuki assosiatiivisille taulukoille on monipuolisempi ja edistyneempi kuin Bash. Zsh sallii assosiatiivisissa taulukoissa olla eri tietotyyppejä avaimia, ei vain merkkijonoja. Bash tukee vain merkkijononäppäimiä.

Bashin aiemmissa versioissa sinun on keksittävä kiertotapa tai oltava ulkoisia työkaluja assosiatiivisten taulukoiden käyttämiseen.

3. Laajennetut pallomaiset kuviot

Laajennetut globbing-kuviot tarjoavat tehokkaan ja joustavan tavan valita ja käsitellä tiedostoja ja hakemistoja eri kriteerien perusteella. Ne ovat hyödyllisiä, kun työskentelet monimutkaisten tiedostorakenteiden kanssa tai kun tarvitset tarkan hallinnan tiedostojen valinnoissa.

Voit ottaa nämä mallit käyttöön Zsh-komentosarjassa käyttämällä setopt komento. Esimerkiksi vastaamaan kaikkia .txt tiedostot nykyisessä hakemistossa:

setopt extended_glob
txt_files=(*.txt)

Kaikkia paitsi .log-tunnisteella varustettujen tiedostojen yhdistäminen:

setopt extended_glob
non_log_files=^(*.log)

Bashissa sinun on otettava ne käyttöön käyttämällä shopt komennon kanssa extglob vaihtoehto. Esimerkiksi vastaamaan kaikkia .txt tiedostot nykyisessä hakemistossa:

shopt -s extglob
txt_files=(*.txt)

Vastaamaan kaikkia tiedostoja paitsi niitä, joissa on .Hirsi laajennus:

shopt -s extglob
non_log_files=!(*.log)

Suurin ero Zsh: n ja Bashin välillä globbing-kuvioiden suhteen on komento, jolla ne otetaan käyttöön. Huomaa kuitenkin, että jotkin operaattorit ovat erilaisia ​​näiden kahden kuoren välillä.

4. Parametrien lisälaajennus

Zsh tukee parametrien epäsuoraa laajentamista. Tämän avulla voit laajentaa sellaisen muuttujan arvoa, jonka nimi on tallennettu toiseen muuttujaan. Tämän saavuttamiseksi sinun on liitettävä muuttujan nimen eteen huutomerkki !.

name="foo"
result="${!name}"
echo "$result"

Bash toisaalta ei salli epäsuoraa laajentumista natiivisti. Ratkaisu tähän on käyttämällä eval sisäänrakennettu komento tai ${!var} syntaksi epäsuorille muuttujaviittauksille.

name="world"
var="name"
echo ${!var} # This will output: world

Samankaltaisuudet Bashin ja Zsh: n välillä

Vaikka Bashin ja Zsh: n välillä on eroja, niillä on myös joitain yhtäläisyyksiä.

1. Komentorivin syntaksi

Bashilla ja Zsh: lla on samanlainen komentorivisyntaksi. Tämä on hienoa, koska se tarkoittaa, että useimmat kirjoittamasi komennot ja komentosarjat toimivat molemmissa kuorissa ilman muutoksia. Zsh on rakennettu Bashin päälle, joten se sisältää kaikki samat peruskomennot ja -ominaisuudet.

Syntaksissa on kuitenkin hyvin pieniä eroja, jotka sinun on tunnistettava ja säädettävä.

2. Komennon korvaamisen johdonmukaisuus

Komennon korvaaminen on prosessi, jossa yhden komennon tulos upotetaan toiseen. Se on johdonmukainen molempien kuorien välillä.

result=$(ls) 

Sekä Bashissa että Zshissa voit käyttää $(komento) syntaksi, joka korvaa komennon tulosteen muuttujalla. Tämä mahdollistaa skriptien helpon siirtämisen kahden kuoren välillä.

3. Komentosarjan virheenkorjausvaihtoehto

Sekä Bash että Zsh käyttävät -x lippu skriptin virheenkorjausta varten. Kun suoritat komentosarjan tällä lipulla, se näyttää jokaisen komennon ennen sen suorittamista. Tämä auttaa sinua tunnistamaan skriptien ongelmat.

# Debugging a script in both Bash and Zsh
#!/bin/bash -x

echo "Debugging Bash script"

Tässä Bash-skriptissä -x lippu mahdollistaa virheenkorjauksen. Voit käyttää samanlaista lähestymistapaa Zsh: ssa; vaihda vain lyödä kanssa zsh.

Huomioitavaa valittaessa Zsh: n ja Bashin välillä

  • Yhteensopivuus ja siirrettävyys: Bash on oletuskuori monissa Unix-pohjaisissa järjestelmissä. Tämä tekee siitä turvallisemman valinnan eri alustojen komentosarjalle. Jos tarvitset komentosarjojasi toimimaan useissa eri järjestelmissä ilman muutoksia, Bash on parempi vaihtoehto.
  • Käsikirjoituksen monimutkaisuus ja lisäominaisuudet: Zsh tarjoaa edistyneitä ominaisuuksia, kuten assosiatiivisia taulukoita, laajennettuja globbing-kuvioita ja edistyneen parametrin laajennuksen. Tämä yksinkertaistaa monimutkaisia ​​komentosarjatehtäviä. Jos komentosarjasi vaativat edistynyttä merkkijonojen käsittelyä tai tietorakenteita, Zsh on parempi valinta.
  • Yhteisön ja laajennusten ekosysteemi: Sekä Bashilla että Zsh: lla on aktiivisia yhteisöjä, mutta Zshilla on vahvempi yhteisö ja laaja laajennusten ja teemojen ekosysteemi. Jos arvostat mukauttamista, Zshin eloisa yhteisö ja laajennustuki voivat olla merkittävä etu.
  • Oppimisen helppous: Jos olet uusi shell-komentosarjan käytössä, Bash on helpommin saatavilla oleva aloituskohta. Siinä on laaja dokumentaatio ja resurssit aloittelijoille. Tämä helpottaa komentotulkin komentosarjojen perusteiden oppimista.

Tehtävien automatisointi Shell-skriptien avulla

On erittäin tärkeää tietää, miten tehtäviä voidaan automatisoida shell-skripteillä. Voit automatisoida toistuvia tehtäviä ja säästää paljon aikaa.

Näiden komentosarjojen avulla voit myös hallita käyttäjätilejä, valvoa järjestelmäresursseja, varmuuskopioida tietoja ja suorittaa rutiinihuoltoa. Huolellisesti kirjoitettuina ne voivat myös vähentää inhimillisten virheiden mahdollisuutta.