GNU/Linux >> Znalost Linux >  >> Linux

Který terminál je lepší:Bash vs Zsh

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!


Linux
  1. Linux vs Windows:Který OS je lepší pro PC hry

  2. Syntaxe deklarace substituce příkazů v Bash – která z těchto dvou je lepší praxe?

  3. Který Shell bych měl použít – Tcsh vs Bash?

  1. Jak číst řetězec jako hexadecimální číslo v Bash?

  2. Glob bez ohledu na velikost písmen na zsh/bash

  3. Extrahujte chybějící cesty z bashového pole cest

  1. Zachovat historii Bash ve Windows s více terminály?

  2. Který Shell Interpreter spouští skript s No Shebang?

  3. Který Bash se provádí?