Obe lupini nudita zmogljive skriptne jezike, vendar nista povsem združljiva.

Ko gre za skriptno lupino v operacijskih sistemih, podobnih Unixu, prevladujeta dve lupini: Bash (Bourne Again Shell) in Zsh (Z Shell). Če ste programer ali sistemski skrbnik, izbira med tema dvema pomembno vpliva na vašo učinkovitost in produktivnost.

Razumevanje razlik in podobnosti med tema lupinama vam bo pomagalo optimizirati potek dela ukazne vrstice. Poznavanje nians vsake lupine vam bo pomagalo pri sprejemanju premišljenih odločitev.

Kaj sta Bash in Zsh?

Bash je priljubljen v sistemih Linux in macOS. Je zmogljivo orodje, ki ga lahko uporabite za interakcijo z operacijskim sistemom in izvajanje ukazov. Lahko tudi uporabite Bash za skriptno lupino, ki avtomatizira opravila s pisanjem skriptov, ki vsebujejo več kot en ukaz.

Zsh (lupina Z) je razširjena različica Basha, ki ima veliko več funkcij. Je privzeta lupina v sistemu macOS. Vse bolj priljubljen postaja tudi v sistemih Linux.

Kako preklopiti z Bash na Zsh

instagram viewer

Če uporabljate sistem Linux in bi radi preklopili na Zsh, začnite z z uporabo upravitelja paketov, da ga namestite. Na primer, v Debianu ali Ubuntuju uporabite naslednji ukaz:

sudo apt install zsh

Ko ga namestite v sistem, preklopite nanj tako, da zaženete naslednji ukaz:

chsh -s $(which zsh)

Če uporabljate macOS, je Zsh že nameščen. Če želite preklopiti nanj, zaženite naslednji ukaz:

chsh -s /bin/zsh

Če želite preklopiti nazaj na Bash, zamenjajte Zsh z Bash v zgornjih ukazih.

Če želite preveriti, katero lupino uporabljate, zaženite naslednji ukaz:

echo $SHELL

To vam bo pomagalo potrditi, da uporabljate lupino, ki ste jo nameravali uporabiti.

Razlike med Zsh in Bash

Med Zsh in Bash je več razlik. Upoštevanje teh razlik vam bo pomagalo pri odločitvi, katera školjka vam najbolj ustreza.

1. Hitro prilagajanje

Zsh ponuja lažji način za prilagajanje vaših pozivov z uporabo %na osnovi ubežnih sekvenc. To omogoča dinamične pozive z barvo in informacijami. Če želite prilagoditi lupinski poziv, definirajte PS1 (Primarni poziv).

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

Zgornji poziv po meri prikazuje uporabniško ime, ime gostitelja in trenutni imenik v različnih barvah:

Veliko jih je drugi načini prilagajanja poziva Zsh, ki vam omogoča nastavitev skrbniškega indikatorja, vključitev datuma in ure ter shranjevanje novega poziva.

Bash uporablja nekoliko drugačen pristop, ko gre za hitro prilagajanje. Uporablja ubežne kode za določanje sprememb barve in oblikovanja v pozivu. Če želite doseči enako prilagoditev kot Zsh zgoraj, lahko uporabite naslednji poziv po meri.

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

Uporaba \[\033[0m\] je ključnega pomena, saj zagotavlja, da spremembe barve ne vplivajo na besedilo, ki sledi pozivu.

2. Podpora za asociativne nize

Zsh izvorno podpira asociativne nize. Ti nizi zagotavljajo priročen način za povezovanje podatkov, kar olajša organiziranje in pridobivanje informacij. Uporaba izjaviti-A ukaz za eksplicitno deklaracijo asociativnega niza:

# Declare an associative array in Zsh 
declare -A my_assoc_array

Nato lahko asociativnemu nizu dodelite vrednosti:

my_assoc_array=(key1 value1 key2 value2) 

In končno dostopajte do vrednosti z njihovimi ključi:

echo $my_assoc_array[key1] # Outputs: value1

Bash je vključil izvorno podporo za asociativne nize od različice 4.0. Vrednosti deklarirate in dodelite na enak način kot v Zsh. Ko pa gre za dostop do vrednosti polja, morate ključ zaviti v zavite oklepaje:

echo "${my_assoc_array[key1]}" 

Glavna razlika je v tem, da je podpora Zsh za asociativne nize bogatejša in naprednejša kot Bash. Zsh omogoča, da imajo asociativni nizi ključe različnih tipov podatkov, ne le nizov. Bash podpira samo tipke nizov.

V prejšnjih različicah Basha morate poiskati rešitev ali imeti zunanja orodja za uporabo asociativnih nizov.

3. Razširjeni vzorci globiranja

Razširjeni vzorci globiranja zagotavljajo zmogljiv in prilagodljiv način za izbiro in upravljanje datotek in imenikov na podlagi različnih meril. Uporabni so, ko delate s kompleksnimi strukturami datotek ali kadar potrebujete natančen nadzor nad izbirami datotek.

V skriptu Zsh lahko te vzorce omogočite z uporabo setopt ukaz. Na primer, da se ujema z vsemi .txt datoteke v trenutnem imeniku:

setopt extended_glob
txt_files=(*.txt)

Za ujemanje vseh datotek razen tistih s pripono .log:

setopt extended_glob
non_log_files=^(*.log)

V Bashu jih morate omogočiti z uporabo shopt ukaz z extglob možnost. Na primer, da se ujema z vsemi .txt datoteke v trenutnem imeniku:

shopt -s extglob
txt_files=(*.txt)

Za ujemanje vseh datotek razen tistih z .log razširitev:

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

Glavna razlika med Zsh in Bash, ko gre za globbing vzorce, je ukaz, ki se uporablja za njihovo omogočanje. Vendar upoštevajte, da se nekateri operaterji med lupinama razlikujejo.

4. Napredna razširitev parametrov

Zsh podpira posredno razširitev parametrov. To vam omogoča, da razširite vrednost spremenljivke, katere ime je shranjeno v drugi spremenljivki. Če želite to doseči, morate pred ime spremenljivke dodati klicaj !.

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

Bash na drugi strani ne omogoča izvorne posredne razširitve. Rešitev za to je uporaba eval vgrajeni ukaz ali ${!var} sintaksa za posredne reference spremenljivk.

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

Podobnosti med Bash in Zsh

Čeprav sta med Bashom in Zshom razlika, imata tudi nekaj podobnosti.

1. Sintaksa ukazne vrstice

Bash in Zsh imata podobno sintakso ukazne vrstice. To je super, ker pomeni, da bo večina ukazov in skriptov, ki jih napišete, delovala v kateri koli lupini, brez sprememb. Zsh je zgrajen na osnovi Basha, zato vključuje vse iste osnovne ukaze in funkcije.

Vendar pa obstajajo zelo majhne razlike v sintaksi, ki jih boste morali prepoznati in prilagoditi.

2. Doslednost zamenjave ukaza

Zamenjava ukazov je postopek vdelave izhoda enega ukaza v drugega. Je skladen med obema lupinama.

result=$(ls) 

V Bash in Zsh lahko uporabite $(ukaz) sintakso za zamenjavo izhoda ukaza v spremenljivko. To omogoča enostavno prenosljivost skriptov med obema lupinama.

3. Možnost odpravljanja napak skripta

Tako Bash kot Zsh uporabljata -x zastavica za razhroščevanje skripta. Ko zaženete skript s to zastavico, prikaže vsak ukaz, preden se zažene. To vam pomaga prepoznati težave v vaših skriptih.

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

echo "Debugging Bash script"

V tem skriptu Bash je -x zastavica omogoča odpravljanje napak. Podoben pristop lahko uporabite v Zsh; samo zamenjaj bash z zsh.

Premisleki pri izbiri med Zsh in Bash

  • Združljivost in prenosljivost: Bash je privzeta lupina v mnogih sistemih, ki temeljijo na Unixu. Zaradi tega je varnejša izbira za skriptiranje na več platformah. Če potrebujete, da se vaši skripti izvajajo v številnih sistemih brez spreminjanja, je Bash boljša možnost.
  • Kompleksnost skripta in napredne funkcije: Zsh ponuja napredne funkcije, kot so asociativni nizi, razširjeni vzorci globiranja in napredna razširitev parametrov. To poenostavi zapletene skriptne naloge. Če vaši skripti zahtevajo napredno manipulacijo nizov ali podatkovne strukture, je Zsh boljša izbira.
  • Skupnost in ekosistem vtičnikov: Tako Bash kot Zsh imata aktivne skupnosti, vendar ima Zsh močnejšo skupnost in obsežen ekosistem vtičnikov in tem. Če cenite prilagajanje, sta lahko živahna skupnost Zsh in podpora za vtičnike pomembna prednost.
  • Enostavnost učenja: Če še niste spoznali skriptne lupine, je Bash bolj dostopna izhodiščna točka. Ima obsežno dokumentacijo in vire, ki so na voljo začetnikom. Tako se boste lažje naučili osnov lupinskega skriptiranja.

Avtomatizacija opravil z uporabo lupinskih skriptov

Vedeti, kako avtomatizirati naloge z lupinskimi skripti, je zelo pomembno. Ponavljajoča se opravila lahko avtomatizirate in prihranite veliko časa.

Te skripte lahko uporabite tudi za upravljanje uporabniških računov, spremljanje sistemskih virov, varnostno kopiranje podatkov in izvajanje rutinskega vzdrževanja. Če so skrbno napisani, lahko tudi zmanjšajo možnost človeške napake.