Oba shelly nabízejí výkonné skriptovací jazyky, ale nejsou zcela kompatibilní.
Pokud jde o skriptování shellu na operačních systémech podobných Unixu, dominují dva shelly: Bash (Bourne Again Shell) a Zsh (Z Shell). Jste-li programátor nebo správce systému, volba mezi těmito dvěma výrazně ovlivňuje vaši efektivitu a produktivitu.
Pochopení rozdílů a podobností mezi těmito dvěma shelly vám pomůže optimalizovat pracovní postup příkazového řádku. Znalost nuancí každé skořápky vám pomůže činit informovaná rozhodnutí.
Co jsou Bash a Zsh?
Bash je populární na systémech Linux i macOS. Je to výkonný nástroj, který můžete použít k interakci s operačním systémem a spouštění příkazů. Můžete také použijte Bash pro skriptování shellu, který automatizuje úlohy psaním skriptů obsahujících více než jeden příkaz.
Zsh (Z shell) je rozšířená verze Bash, která má mnohem více funkcí. Je to výchozí prostředí v systému macOS. Stále populárnější je také na systémech Linux.
Jak přejít z Bash na Zsh
Pokud používáte systém Linux a chtěli byste přejít na Zsh, začněte tím
pomocí správce balíčků jej nainstalujte. Například na Debianu nebo Ubuntu použijte následující příkaz:sudo apt install zsh
Po instalaci do systému se na něj přepněte spuštěním následujícího příkazu:
chsh -s $(which zsh)
Pokud používáte macOS, Zsh je již nainstalován. Chcete-li se na něj přepnout, spusťte následující příkaz:
chsh -s /bin/zsh
Chcete-li přepnout zpět na Bash, nahraďte Zsh ve výše uvedených příkazech Bash.
Chcete-li zkontrolovat, který shell používáte, spusťte následující příkaz:
echo $SHELL
To vám pomůže potvrdit, že používáte shell, který jste zamýšleli.
Rozdíly mezi Zsh a Bash
Mezi Zsh a Bash je několik rozdílů. Zvážení těchto rozdílů vám pomůže rozhodnout se, která skořepina vám nejlépe vyhovuje.
1. Rychlé přizpůsobení
Zsh nabízí jednodušší způsob přizpůsobení vašich výzev %-založené escape sekvence. To umožňuje dynamické výzvy s barvou a informacemi. Chcete-li přizpůsobit výzvu shellu, definujte PS1 (Primární výzva).
PS1="%F{green}%n@%m %F{blue}%~ %f$ "
Výše uvedená vlastní výzva zobrazuje uživatelské jméno, název hostitele a aktuální adresář v různých barvách:
Je jich mnoho další způsoby přizpůsobení výzvy Zsh, která vám umožní nastavit indikátor správce, zahrnout datum a čas a uložit novou výzvu.
Bash používá trochu jiný přístup, pokud jde o rychlé přizpůsobení. K určení změn barvy a formátování ve výzvě používá únikové kódy. Chcete-li dosáhnout stejného přizpůsobení jako Zsh výše, můžete použít následující vlastní výzvu.
PS1="\[\033[32m\]\u@\h \[\033[34m\]\w \[\033[0m\]\$ "
Použitím \[\033[0m\] je zásadní, protože zajišťuje, že změny barev neovlivní text, který následuje po výzvě.
2. Podpora pro asociativní pole
Zsh nativně podporuje asociativní pole. Tato pole poskytují pohodlný způsob, jak sdružovat data, což usnadňuje organizaci a získávání informací. Použití prohlásit-A příkaz k explicitní deklaraci asociativního pole:
# Declare an associative array in Zsh
declare -A my_assoc_array
Potom můžete asociativnímu poli přiřadit hodnoty:
my_assoc_array=(key1 value1 key2 value2)
A nakonec přistupujte k hodnotám pomocí jejich klíčů:
echo $my_assoc_array[key1] # Outputs: value1
Bash zahrnul nativní podporu pro asociativní pole od verze 4.0. Hodnoty deklarujete a přiřadíte stejným způsobem jako v Zsh. Ale pokud jde o přístup k hodnotám pole, musíte klíč zabalit do složených závorek:
echo "${my_assoc_array[key1]}"
Hlavním rozdílem je, že podpora asociativních polí Zsh je bohatší a pokročilejší než Bash. Zsh umožňuje asociativním polím mít klíče různých datových typů, nikoli pouze řetězce. Bash podporuje pouze řetězcové klíče.
V dřívějších verzích Bash musíte vymyslet způsob, jak to obejít, nebo mít externí nástroje pro použití asociativních polí.
3. Rozšířené Globbing Vzory
Rozšířené vzory globování poskytují výkonný a flexibilní způsob výběru a manipulace se soubory a adresáři na základě různých kritérií. Jsou užitečné, když pracujete se složitými strukturami souborů nebo když potřebujete přesnou kontrolu nad výběrem souborů.
Ve skriptu Zsh můžete tyto vzory povolit pomocí setopt příkaz. Například, aby odpovídaly všem .txt soubory v aktuálním adresáři:
setopt extended_glob
txt_files=(*.txt)
Chcete-li porovnat všechny soubory kromě souborů s příponou .log:
setopt extended_glob
non_log_files=^(*.log)
V Bash je musíte povolit pomocí nakupovat příkaz s extglob volba. Například, aby odpovídaly všem .txt soubory v aktuálním adresáři:
shopt -s extglob
txt_files=(*.txt)
Porovnat všechny soubory kromě souborů s .log rozšíření:
shopt -s extglob
non_log_files=!(*.log)
Hlavním rozdílem mezi Zsh a Bash, pokud jde o globovací vzory, je příkaz používaný k jejich povolení. Všimněte si však, že některé operátory se mezi těmito dvěma shelly liší.
4. Rozšířené rozšíření parametrů
Zsh podporuje nepřímé rozšíření parametrů. To umožňuje rozšířit hodnotu proměnné, jejíž název je uložen v jiné proměnné. Chcete-li toho dosáhnout, musíte před název proměnné přidat vykřičník !.
name="foo"
result="${!name}"
echo "$result"
Na druhou stranu Bash nativně neumožňuje nepřímou expanzi. Řešením je použití eval vestavěný příkaz nebo ${!var} syntaxe pro odkazy na nepřímé proměnné.
name="world"
var="name"
echo ${!var} # This will output: world
Podobnosti mezi Bash a Zsh
I když existují rozdíly mezi Bash a Zsh, sdílejí také některé podobnosti.
1. Syntaxe příkazového řádku
Bash a Zsh sdílejí podobnou syntaxi příkazového řádku. To je skvělé, protože to znamená, že většina příkazů a skriptů, které napíšete, bude fungovat v obou shellech bez úprav. Zsh je postaven na Bash, takže obsahuje všechny stejné základní příkazy a funkce.
Existují však velmi malé rozdíly v syntaxi, které budete muset identifikovat a upravit.
2. Konzistence substituce příkazů
Náhrada příkazů je proces vkládání výstupu jednoho příkazu do druhého. Je konzistentní mezi oběma skořápkami.
result=$(ls)
V Bash i Zsh můžete použít $ (příkaz) syntaxe k nahrazení výstupu příkazu do proměnné. To umožňuje snadnou přenositelnost skriptů mezi dvěma shelly.
3. Možnost ladění skriptů
Používají se Bash i Zsh -X příznak pro ladění skriptů. Když spustíte skript s tímto příznakem, zobrazí se před spuštěním každý příkaz. To vám pomůže identifikovat problémy ve vašich skriptech.
# Debugging a script in both Bash and Zsh
#!/bin/bash -x
echo "Debugging Bash script"
V tomto skriptu Bash je -X flag umožňuje ladění. Podobný přístup můžete použít v Zsh; jen vyměnit bash s zsh.
Úvahy o výběru mezi Zsh a Bash
- Kompatibilita a přenositelnost: Bash je výchozí shell na mnoha systémech založených na Unixu. Díky tomu je bezpečnější volbou pro multiplatformní skriptování. Pokud potřebujete, aby vaše skripty běžely na široké škále systémů bez úprav, Bash je lepší volba.
- Složitost skriptů a pokročilé funkce: Zsh poskytuje pokročilé funkce, jako jsou asociativní pole, rozšířené globovací vzory a pokročilé rozšíření parametrů. To zjednodušuje složité skriptovací úlohy. Pokud vaše skripty vyžadují pokročilou manipulaci s řetězci nebo datové struktury, je Zsh lepší volbou.
- Ekosystém komunity a pluginů: Bash i Zsh mají aktivní komunity, ale Zsh má silnější komunitu a rozsáhlý ekosystém pluginů a témat. Pokud si ceníte přizpůsobení, živá komunita a podpora pluginů Zsh může být významnou výhodou.
- Snadnost učení: Pokud jste ve skriptování shellu noví, Bash je přístupnějším výchozím bodem. Má rozsáhlou dokumentaci a zdroje dostupné pro začátečníky. To usnadňuje naučit se základy skriptování shellu.
Automatizace úloh pomocí skriptů Shell
Vědět, jak automatizovat úlohy pomocí shell skriptů, je velmi důležité. Můžete automatizovat opakující se úkoly a ušetřit spoustu času.
Tyto skripty můžete také použít ke správě uživatelských účtů, sledování systémových prostředků, zálohování dat a provádění běžné údržby. Pokud jsou pečlivě napsány, mohou také snížit potenciál lidské chyby.