Obvykle, když mluvíme o linuxových serverech nebo kontejnerech Docker, obvykle máme na mysli rozhraní příkazového řádku, shell nebo terminál. V komunitě jsou dva široce používané shelly:Bash a Zsh. Bash je považován za nejpoužívanější shell. Zároveň se v dnešní době stává stále populárnější Z shell nebo Zsh. Jaký terminál byste si tedy měli vybrat? V tomto článku porovnáme Bash vs Zsh a pokusíme se odpovědět na otázku, který terminál je lepší.
Historie
Bash shell (Bourne Again Shell) byl představen v roce 1989 jako náhrada Bourne Shell a velmi rychle se stal výchozím linuxovým shellem. Bash je schopen provádět širokou škálu programovacích řešení a automatizovaných úloh v Linuxu, ale to není jediný shell, který můžete použít. Existuje několik dalších shellů, které mohou provádět podobné funkce jako Bash.
Jedním z nich je Zsh, který byl vytvořen v roce 1990 jako rozšířený Bourne shell s mnoha dalšími funkcemi Bash, ksh a tcsh. Pokud jste uživatelem Linuxu, nemusíte Zsh instalovat samostatně, protože je standardně součástí téměř všech moderních distribucí. Bash a Zsh sdílejí některé funkce, ale mezi těmito shelly je také mnoho rozdílů, které popíšeme v tomto článku. Tento článek pokrývá následující části:
- Srovnávací tabulka funkcí
- Porovnání uživatelského prostředí terminálu
- Seznam rozdílů mezi Bash a Zsh
Nyní přejdeme k první části tohoto článku.
Porovnání funkcí
V této části pokryjeme nejdůležitější rozdíly.
Zsh | Bash |
Obsahuje mnoho pokročilých funkcí. | Neobsahuje pokročilé funkce. |
Má složitější strukturu konfiguračních souborů. | Struktura konfiguračních souborů je jednoduchá. |
Konfiguraci a přizpůsobení zajišťuje framework Oh My Zsh. | Konfiguraci a přizpůsobení zajišťuje Bash-it. |
Historie příkazů je sdílena napříč všemi shelly. | Sdílení historie je obtížné. |
Skripty Zsh nejsou tak široce používané. | Bash skripty jsou široce používané. |
Zsh nenačte SHELLOPTS během spouštění. | SHELLOPTS jsou načteny během startu. |
Konfiguraci prostředí lze lépe přizpůsobit pomocí zshrc , zlogin , zshenv , zlogout , zprofile . | Prostředí je méně přizpůsobitelné a lze jej implementovat s menším počtem skriptů. |
Umožňuje použití rozšířených aliasů kdekoli v souboru. | Bash ve výchozím nastavení nepodporuje rozšířené aliasy. |
zparseopts velmi usnadňuje analýzu argumentů skriptů. | Analyzovat argumenty skriptu pomocí getopts je trochu náročnější. |
Terminální výpočty lze provádět pomocí zcalc . | Musíte použít dvě externí kalkulačky:bc a expr . |
Skripty pro konfiguraci/automatické spuštění terminálu se načítají z ~/.zshrc soubor. | Konfigurační/automatické spouštěcí skripty terminálu se načítají z ~/.bashrc soubor. |
bindkey se používá pro vázání klíčů. | bind vestavěný a ~/.inputrc se používají pro klíčovou vazbu. |
Více možností pro vytváření efektních výzev. | Méně možností pro efektní výzvy. |
setopt zodpovědný za nastavení shellu. | shopt konfiguruje nastavení prostředí. |
# se nepovažuje za komentář, pokud není INTERACTIVE_COMMENTS je nastaveno. | # představuje řetězec komentáře. |
Rozšířené vzory zástupných znaků jsou ve výchozím nastavení povoleny. | Použijte shopt -s extglob pro povolení rozšířených vzorů zástupných znaků. |
Více způsobů transformace hodnoty proměnné (rozšíření parametrů). | Méně metod pro transformaci proměnných. |
Má zabudované funkce automatického dokončování a opravy pravopisu. | Musíte použít bash-completion balíček. |
K dispozici je více pluginů a motivů. | K dispozici je méně pluginů a motivů. |
Zsh je lépe přizpůsobitelné. | Bash je méně přizpůsobitelný. |
Kompatibilní s POSIX, pokud emulate sh bylo nastaveno. | Řiďte se standardy POSIX, pokud
--posix
byla nastavena možnost příkazového řádku. |
Automatické dokončení funguje rychleji. | Automatické dokončení je pomalejší. |
Menší komunita | Širší komunita |
Bash vs Zsh – objem vyhledávání na internetu
Zde je graf Google Tends, který ukazuje srovnání objemu vyhledávání pro oba shelly:
Bash vs Zsh – UX
V této sekci si projdeme nejběžněji používané funkce prostředí UX, které denně používáte.
Nastavení kontejneru dockeru
Pokud chcete pouze otestovat následující příklady, nejlepším způsobem, jak toho dosáhnout, je spustit kontejner Ubuntu Docker:
docker run -it ubuntu:20.04 /bin/bash
Kontejner Docker nemá ve výchozím nastavení nainstalován Zsh, takže jej musíte nejprve nainstalovat:
apt-get update
apt-get install -y zsh
Nakonec můžete spustit zsh shell:
zsh
Karta pro automatické dokončení
Tab
použití klíče v Zsh a Bash trochu jiné. Pro ilustraci tohoto příkladu vytvoříme několik vnořených adresářů:
mkdir -p onedrive/docs
mkdir -p onedrive/pics
V Bash musíte použít Tab
pro automatické dokončení cesty k adresáři nebo souboru.
Zadejte například jeden a poté stiskněte Tab
, typ d a stiskněte Tab
znovu pro dokončení cesty v terminálu:
cd onedrive/docs
Očekávaný výsledek by měl vypadat takto:
V Zsh, použití Tab
vám poskytne seznam dostupných možností, ze kterých si můžete vybrat.
Zadejte jeden a stiskněte Tab
a poté stiskněte Tab
znovu tolikrát, kolikrát chcete vybrat požadovaný adresář:
Oprava pravopisu
Funkce opravy pravopisu je podporována shelly Zsh i Bash. Zsh to však dělá efektivněji.
V níže uvedeném příkladu se dozvíte, jak povolit Zsh a Bash automaticky opravovat pravopis.
Vytvořme adresář s názvem onedrive
, pokud jste to neudělali v předchozí části článku:
mkdir -p onedrive
Nyní uděláme překlep v příkazu shellu Bash:
cd onedrave
Bash Shell neopraví překlep „dra ve“ až „dri ve“ a zobrazí chybu „Žádný takový soubor nebo adresář. “
Chcete-li povolit funkci automatické kontroly pravopisu v bash, musíte upravit konfiguraci bash.
nano ~/.bashrc
Na konec souboru přidejte následující řádek:
shopt -s cdspell
Použijte source
příkaz k použití změn na shell.
source ~/.bashrc
Proveďte chybně napsaný příkaz znovu. Terminál Bash automaticky opravil překlep:
cd onedrave
A co Zsh?
Necháme překlepnout příkaz „echo“, abychom zkontrolovali, zda jej Zsh automaticky detekuje a opraví:
ehco "Hello World"
Jak se očekávalo, Zsh neopravil pravopis.
Nyní provedeme nějaké změny v konfiguraci Zsh.
nano ~/.zshrc
Zapněte correctexport
možnost pro shell. Můžete také zadat výzvu:
setopt correct
export SPROMPT="Correct %R to %r? [Yes, No, Abort, Edit ]"
Nedělejte si starosti, pokud je soubor prázdný, je v pořádku, bude doplněn další konfigurací, jakmile později nainstalujeme Oh My Zsh.
Zde je návod, jak by to mělo vypadat, pokud nás sledujete v kontejneru Docker:
Spusťte source
příkaz k použití změn na shell.
source ~/.zshrc
Proveďte chybně napsané echo
příkaz znovu:
ehco "Hello World"
Tady to je!
Automatická kontrola pravopisu je nyní povolena:
Motivy
Abyste mohli používat jakákoli témata a přizpůsobení Bash nebo Zsh, musíte si nainstalovat Git:
apt-get install -y git
Chcete-li nainstalovat přizpůsobení pro prostředí Bash, použijte následující příkaz:
git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it
Proces instalace je velmi jednoduchý:
~/.bash_it/install.sh
Nyní můžeme upravit ~/.bashrc
soubor pro úpravu motivu Bash:
nano ~/.bashrc
Změňte BASH_IT_THEME
hodnota proměnné k jakémukoli motivu, který existuje v balíčku motivů, zkuste například závist .
Chcete-li použít změny, spusťte následující příkaz:
source ~/.bashrc
Nyní přizpůsobíme Zsh.
Jak již bylo zmíněno dříve, rámec Oh My Zsh poskytuje mnoho užitečných funkcí a rozsáhlou kolekci témat.
Instalace Oh My Zsh také není příliš obtížná:
apt install -y curl wget git
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Stačí odpovědět Y na všechny otázky a ve výchozím nastavení získáte krásné přizpůsobení shellu:
Nyní jsou motivy Zsh umístěny v:~/.oh-my-zsh/themes
složka:
ls ~/.oh-my-zsh/themes/
Zde můžete vidět názvy témat obsažených v balíčku.
Výchozí téma Zsh je „robbyrussell “. Chcete-li tento motiv upravit, aktualizujte ZSH_THEME
hodnota proměnné v ~/zshrc
soubor:
nano ~/.zshrc
Nyní upravte ZSH_THEME
proměnnou hodnotu pro nastavení nového motivu pro váš terminál. Zde je seznam příkladů uživatelského rozhraní.
Chcete-li použít změny, použijte source
příkaz:
source ~/.zshrc
Rozšíření zástupné karty
Názvy souborů se používají ke shodě se zástupnými znaky. Bash má tuto vestavěnou funkci v sobě, zatímco pro Zsh musíte povolit rozšíření zástupných znaků nastavením globální podmnožiny.
Vytvoříme pár .txt
soubory v Bash:
touch text_file1.txt
touch text_file2.txt
ls
Nyní můžeme vypsat náš .txt
soubory pomocí zástupného výrazu v proměnné:
files="*.txt"
echo $files
V Zsh takový přístup nebude ve výchozím nastavení fungovat:
touch text_file1.txt
touch text_file2.txt
ls
file="*.txt"
echo $file
set -o GLOB_SUBST
file="*.txt"
echo $file
Nyní, zástupné výrazy fungují!
Vložte tuto volbu do ~/.zshrc
, pokud si takové chování Zsh přejete zachovat i v budoucnu:
set -o GLOB_SUBST
Shrnutí
Zsh i Bash jsou extrémně výkonné shelly se spoustou rozšíření a možností konfigurace. Zsh má robustní přizpůsobení, rozšiřitelnost a pokročilé funkce. Bash je stále šířeji používán, takže myslete na zpětnou kompatibilitu vašich skriptů s jinými systémy, které možná budete muset spravovat.
Moje osobní volba je Zsh, pokud jde o osobní notebook, a Bash, pokud jde o činnosti správy serveru.
Doufám, že tento článek byl pro vás užitečný. Pokud ano, pomozte nám to rozšířit do světa!