GNU/Linux >> Znalost Linux >  >> Linux

Jaké funkce jsou v Zsh a chybí Bash, nebo naopak?

Jako uživatel Linuxu jsem vždy používal pouze bash, protože to bylo výchozí u všech distribucí, které jsem použil. Zdá se, že lidé používající jiné unixové systémy, jako je BSD, používají jiné shelly mnohem častěji. V zájmu dozvědět se trochu více jsem se rozhodl vyzkoušet zsh.

Jako uživatel bash:

  • Jaké funkce mi budou chybět?
  • A na které bych si měl dát pozor?

Přijatá odpověď:

Rozsáhlejší odpověď najdete na https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences-between-bash-and-zsh/361957#361957

Na jiných webech Stack Exchange již na toto téma bylo poměrně dost aktivity. Moje zkušenost s přechodem z bash na zsh, pokud si pamatuji (bylo to před lety²), je taková, že jsem nevynechal jedinou věc. Získal jsem hodně; zde jsou podle mě jednoduché funkce specifické pro zsh, které používám nejčastěji:

  • Funkce zsh, která mi nejvíce chybí, když občas používám bash, je autocd:v zsh znamená spuštění adresáře změnu do něj, za předpokladu, že zapnete autocd možnost.⁴

  • Další velmi užitečnou funkcí je efektní globbing. hieroglyfy znaky jsou trochu obtížně zapamatovatelné, ale velmi pohodlné (jako v tom, že je často rychlejší je vyhledat, než napsat ekvivalentní find příkaz). Několik jednodušších příkladů:
        foo*~*.bak =všechny shody pro foo* kromě těch, které odpovídají *.bak
        foo*(.) =pouze běžné soubory vyhovující foo*
        foo*(/) =pouze adresáře vyhovující foo*
        foo*([email protected]) =pouze visící symbolické odkazy odpovídající foo*
        foo*(om[1,10]) =10 nejnovějších souborů odpovídajících foo*
        foo*(Lm+1) =pouze soubory o velikosti> 1 MB
        dir/**/foo* =foo* v adresáři dir a všechny jeho podadresáře, rekurzivně⁴

  • Pro efektní přejmenování, zmv vestavěný může být užitečný. Například ke zkopírování každého file do file.bak :zmv -C '(*)(#q.)' '$1.bak'

  • Bash i zsh mají slušný systém dokončování, který je třeba explicitně zapnout (. /etc/bash_completion nebo autoload -U compinit; compinit ). Zsh's je mnohem lépe konfigurovatelný a obecně lepší.

Pokud spustíte zsh bez .zshrc , spustí interaktivní nabídku, která vám umožní vybrat možnosti konfigurace. (Některé distribuce mohou toto zakázat; v takovém případě spusťte autoload zsh-newuser-install; zsh-newuser-install .) Doporučuji povolit doporučené možnosti historie, zapnout dokončování („nový styl“) a zapnout „společné možnosti shellu“ kromě beep . Později nakonfigurujte další možnosti, jakmile je objevíte.

Související:Co znamená „>/dev/null 2>&1“ v tomto článku o základech crontab?

²V té době bylo programovatelné dokončení zabijáckou funkcí zsh, ale bash ji získal brzy poté.
Funkce, které bash získal pouze ve verzi 4 (takže nebyly široce dostupné v době zveřejnění této odpovědi a nejsou dostupné v systému bash na macOS), jsou menšího typu.


Linux
  1. Jaké příkazy chybí ve vašem souboru bashrc?

  2. Rozdíl mezi ‚A‘ na příkazovém řádku (bash)??

  3. Co jsou oddělovače slov Readline?

  1. Jaké jsou základní rozdíly mezi mainstreamovými *nix shelly?

  2. Co jsou výstupní kódy Bash v Linuxu

  3. Jaká jsou nativní volání OS/systému Windows a Linuxu prováděná z malloc()?

  1. Co je vdso a vsyscall?

  2. Exportujte proměnnou z bash a použijte ji v Pythonu

  3. Co je obsahem /bin/bash a co mám dělat, když je omylem přepíšu