Portál AbcLinuxu, 4. května 2025 05:29

ZSH - viac než len náhrada za Bash

23.9.2012 16:10 | Přečteno: 2755× | Linux | Výběrový blog | poslední úprava: 24.9.2012 07:53

ZSH je plnohodnotný shell čiastočne kompatibilný s Bash-om. Oproti Bashu však poskytuje mnoho viac či menej užitočných funkcií. Jeho prispôsobiteľnosť je oproti Bashu doslova v inej dimenzii. Nie je to náhoda, že najviac eye-candy prompt majú práve užívatelia ZSH. Ja som samozrejme ako milovník eye-candy musel ZSH vyskúšať a sám som bol prekvapený ako je ZSH nabitý užitočnými vlastnosťami. Dnešný blog sa bude zaoberať inštaláciou a základnými nastaveniami ZSH.

Počiatky vývoja ZSH siahajú až do roku 1990. ZSH sa zo štandardných shellov najviac podobá Korn shellu (ksh). Oproti originálu však prináša množstvo vylepšení. V súčasnosti je stále vyvíjaný a v čase písania blogu je aktuálna verzia 5.0.0 vydaná 24. 7. 2012.

Komunita okolo ZSH je veľmi aktívna. Na internete je možné nájsť množstvo hotových konfiguračných súborov. Na internete sú dokonca dostupné celé balíky nastavení pre ZSH. Obrázok je niekedy lepší než tisíc slov, zdĺhavý text nahradím radšej odkazom na wiki stránky tém ;-)

Inštalácia

Najjednoduchším spôsobom inštalácie v Linuxe bude použitie balíčkovacieho systému. Po inštalácii môžme voliteľne nastaviť štandardný užívateľský shell na zsh príkazom usermod -s /bin/zsh login_užívateľa. Pre vyskúšanie však nemusíme nič nastavovať, stačí zo štandardného shellu spustiť príkaz zsh.

Pri prvom spustení sa zobrazí sprievodca úvodným nastavením. Pre pre nastavenie shellu zvolíme možnosť 1 (Continue to the main menu.). Následne máme možnosť pomocou jednoduchého menu nakonfigurovať základné funkcie zsh:

1. História
Počet záznamov v histórii a súbor, do ktorého sa bude história ukladať
2. Systém doplňovania
Tu máme možnosť aktivovať pokročilý systém doplňovania (okrem doplňovania ciest bude ZSH schopný dopĺňať aj voľby niektorých programov).
3. Konfigurácia kláves pre ovládanie príkazového riadku
ZSH sa dokáže spôsobom editácie prispôsobiť štandardnému editoru. Dostupné možnosti sú buď emulácia Emacsu, alebo vi, alebo automatická detekcia pomocou premennej $EDITOR.
4. Rôzne nastavenia shellu
Niekoľko jednoduchých prepínačov (on/off) pre funkcie: autocd (vstup do adresárov len napísaním cesty bez príkazu cd), extendedglob (podpora pokročilých patternov na výber súborov / adresárov), appendhistory (pridanie nových položiek do histórie namiesto jej prepisu), nomatch (vyvolanie chyby v prípade, že žiaden súbor nezodpovedá patternu), beep (otravné pípnutie pri chybe) a notify (upozornenie na zmenu stavu úloh na pozadí).

Po nastavení môžme uložiť konfiguráciu klávesou 0.

Nastavenie klávesnice

Kódy špeciálnych kláves (F1-F12, kurzorové klávesy …) nie sú na všetkých *nix-och rovnaké. Aby bola zaistená kompatibilita ZSH s takmer akýmkoľvek terminálom používa tento shell nástroj zkbd. Pred jeho spustením musíme povoliť automatické načítanie skriptu (autoload zkbd). Až potom môžme spustiť zkbd, ktorý nás prevedie nastavením klávesnice. Zároveň tento nástroj vypíše kód, ktorý by sme mali vložiť do .zshrc:

source ~/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}
# etc.

Vždy pri novom type terminálu, alebo pod iným sedením X by sa mal spustiť nástroj zkbd. Táto činnosť sa dá zabezpečiť automaticky vložením nasledujúceho kódu pred príkaz source.

autoload zkbd
[[ ! -f ${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE} ]] && zkbd

Príkaz autoload oproti source načítava skripty až pri prvom volaní, takže v .zshrc nemá takmer žiadnu réžiu. Skript zkbd sa spúšťa len v prípade, že neexistuje nastavenie pre aktuálny emulátor terminálu a display.

Vo väčšine prípadov nastavenie premennej DISPLAY nebude mať žiaden vplyv na riadiace znaky terminálu. Ak nechceme spúšťať zkbd pre každý DISPLAY zvlášť (čo je obzvlášť nepríjemné u ssh -X) môžme pred spustením zkbd nastaviť DISPLAY na pevnú hodnotu a potom obnoviť pôvodné nastavenie.

_DISPLAY=$DISPLAY
DISPLAY=
autoload zkbd
[[ ! -f ${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE} ]] && zkbd
source ${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}
DISPLAY=$_DISPLAY
unset _DISPLAY

Priradenie klávesových skratiek

Po nastavení klávesnice sa môžme pustiť do nastavenia klávesových skratiek zle (zle je skratka pre zsh line editor ;-) ). Skratky sa priraďujú príkazom bindkey klávesa príkaz. Dostupné príkazy zle sa dajú vypísať pomocou automatického dopĺňania: zle<medzera><tab>. Podrobné informácie o zle je možné nájsť v používateľskej príručke. Nasledujúci kód mám ja v .zshrc za nastavením klávesnice:

[[ -n ${key[Backspace]} ]] && bindkey "${key[Backspace]}" backward-delete-char
[[ -n ${key[Insert]} ]]    && bindkey "${key[Insert]}" overwrite-mode
[[ -n ${key[Home]} ]]      && bindkey "${key[Home]}" beginning-of-line
[[ -n ${key[PageUp]} ]]    && bindkey "${key[PageUp]}" up-line-or-history
[[ -n ${key[Delete]} ]]    && bindkey "${key[Delete]}" delete-char
[[ -n ${key[End]} ]]       && bindkey "${key[End]}" end-of-line
[[ -n ${key[PageDown]} ]]  && bindkey "${key[PageDown]}" down-line-or-history
[[ -n ${key[Up]} ]]        && bindkey "${key[Up]}" up-line-or-search
[[ -n ${key[Left]} ]]      && bindkey "${key[Left]}" backward-char
[[ -n ${key[Down]} ]]      && bindkey "${key[Down]}" down-line-or-search
[[ -n ${key[Right]} ]]     && bindkey "${key[Right]}" forward-char
                              bindkey "^R" history-incremental-search-backward

Nastavenie promptu

Hlavný prompt sa v ZSH nastavuje podobne ako v iných shelloch nastavením premennej PS1, alebo PROMPT.

Pre "hranie" sa s promptom stačí priamo do shellu exportovať premennú PS1. Pre zapamätanie nastavenia promptu sa musí do .zshrc zapísať riadok PS1="…" (kľúčové slovo export tu nie je povinné). Nasledujúci príkaz nastaví prompt na meno@host adresár $ pre aktuálne sedenie.

$ export PS1="%n@%m %~ $ "
mirec@kofola ~ $

Kompletný zoznam sekvencií, ktoré pozná ZSH je možné nájsť v manuáli.

Farby

Farbu písma je možné zmeniť v ZSH sekvenciou %F{farba} napr. %F{green}. Štandardná farba shellu sa dá obnoviť sekvenciou %f. Tučný rez sa nastavuje sekvenciou %B a zrušiť sa dá sekvenciou %b. Farba pozadia sa nastavuje / obnovuje sekvenciou %K/%k. Nasledujúci kód nastaví prompt podobný štandardnému promptu Gentoo:

export PS1="%B%F{green}%n@%m %F{blue}%~ $%b%f "
Prompt

Ukážkové nastavenie zshrc

Nasledujúci súbor je ukážkový .zshrc, ktorý som vytváral počas písania tohto blogu.

# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=5000
SAVEHIST=5000
setopt appendhistory autocd extendedglob notify
unsetopt beep nomatch
bindkey -v
# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '/home/kde4/.zshrc'

autoload -Uz compinit
compinit
# End of lines added by compinstall

_DISPLAY=$DISPLAY
DISPLAY=
autoload zkbd
[[ ! -f ${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE} ]] && zkbd
source ${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}
DISPLAY=$_DISPLAY
unset _DISPLAY

[[ -n ${key[Backspace]} ]] && bindkey "${key[Backspace]}" backward-delete-char
[[ -n ${key[Insert]} ]] && bindkey "${key[Insert]}" overwrite-mode
[[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line
[[ -n ${key[PageUp]} ]] && bindkey "${key[PageUp]}" up-line-or-history
[[ -n ${key[Delete]} ]] && bindkey "${key[Delete]}" delete-char
[[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line
[[ -n ${key[PageDown]} ]] && bindkey "${key[PageDown]}" down-line-or-history
[[ -n ${key[Up]} ]] && bindkey "${key[Up]}" up-line-or-search
[[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char
[[ -n ${key[Down]} ]] && bindkey "${key[Down]}" down-line-or-search
[[ -n ${key[Right]} ]] && bindkey "${key[Right]}" forward-char
bindkey "^R" history-incremental-search-backward

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

Používanie

Dúfam, že som nikoho neunavil konfiguráciou až príliš :-) Na dnes si už s konfiguráciou dáme pokoj a poďme sa ponoriť do používania ZSH.

História príkazov

Podobne ako väčšina shellov aj ZSH poskytuje históriu posledných príkazov. K tým sa môžme dostať obyčajne pomocou kurzorovej klávesy up. Posledné príkazy je možné editovať buď podobným spôsobom ako v Emacs-e, alebo ako vo vim-e.

V histórii je možné vyhľadávať podobne ako v iných shelloch klávesovou skratkou <Ctrl+r> za predpokladu, že táto skratka bola priradená funkcii history-incremental-search-backward (bindkey "^R" history-incremental-search-backward).

Doplňovanie príkazov

Príkazy sa doplňujú klávesou <tab>. ZSH podporuje aj doplňovanie parametrov podobne ako bash-completion.

kofola% dd <TAB>
bs    -- block size
cbs   -- conversion buffer size
conv  -- specify conversions to apply
count -- number of input blocks to copy
files -- specify number of input files to copy and concatenate
ibs   -- input block size
if    -- specify input file
obs   -- output block size
of    -- specify output file
seek  -- output blocks initially skipped
skip  -- input blocks initially skipped

Na rozdiel od bash-u si zsh výsledky vyhľadávania po sebe pekne „uprace“ a po pustení príkazu nebude doplňovanie nikde v histórii terminálu.

Doplňovať príkazy je možné aj pomocou jednoduchého menu, stačí pred doplňovaním spustiť príkaz:

zstyle ':completion:*' menu select=0
Doplňovanie pomocou menu

Prechádzanie adresárov bez cd

Príkaz cd je jedným z najpoužívanejších príkazov. ZSH umožňuje úplne eliminovať písanie tohto príkazu svojou funkciou autocd. Aktivuje sa príkazom setopt autocd. Používanie je veľmi jednoduché, stačí do shellu napísať či už lokálnu, alebo absolútnu cestu a stlačiť enter (bez akéhokoľvek cd).

Kde sú killer funkcie?

Na začiatku som písal, že som si ZSH vybral hlavne kvôli možnosti zmeny vzhľadu a úpravy správania. Táto téma je príliš rozsiahla na to aby sa vošla do jediného blogu. V nasledujúcom blogu sa pokúsim ukázať ako do ZSH integrovať zvýrazňovanie syntaxe počas písania podobne ako to má fish. Ďalej sa budem venovať použitiu skriptov z projektu oh-my-zsh. Pozrieme sa na niekoľko zaujímavých trikov s promptom ako napr. integráciu VCS, alebo zobrazenie posledného návratového kódu. Zároveň by som rád napísal zopár slov o funkciách ako integrovaný ftp klient, hry … :-)

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (3) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Migi avatar 23.9.2012 16:17 Migi | skóre: 59 | blog: Mig_Alley
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Odpovědět | Sbalit | Link | Blokovat | Admin
Tyhle nad míru kvalitní blogy by se měli zobrazovat mezi články.
23.9.2012 16:25 skywaker
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
+1 mirec pise fajne blogy.. takychto by na technickych portaloch ako je abicko malo byt viacej.
23.9.2012 16:28 skywaker
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
mirec mohol by si napisat nejaky obsiahly blog pre zaciatocnikov ako si nastavit VIM a instalacia doplnkov a tak
mirec avatar 23.9.2012 16:30 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Niečo na túto tému mám rozpísané, ale robím veľa vecí paralelne, takže kedy to bude hotové neviem ;)
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
Luboš Doležel (Doli) avatar 23.9.2012 23:16 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
I já bych rád články o VIMu (i ZSH) viděl mezi články. Dohodneme se? :-)
mirec avatar 24.9.2012 07:41 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Kľudne môžu byť zverejnené ako články, ja budem len rád. Na najväčšom českom linuxovom portáli publikujem práve kvôli počtu čitateľov.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
23.9.2012 18:56 Josef
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
+1 pěkně zpracované a bylo by škoda aby to zapadlo mezi ostatními v drtivé většině nesmyslnými blogy
xkucf03 avatar 23.9.2012 20:31 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Proto je to ve výběru :-)
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Migi avatar 23.9.2012 23:29 Migi | skóre: 59 | blog: Mig_Alley
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
tydle výbery me osobně prijdou k ničemu, protože kolikrat to dostane blog o pěti řadcích a to jen díky tomu, že komentuje cokoli v IT. Tohle je perla. Ctrl+c ctrl+v a šup mezi články.
AsciiWolf avatar 23.9.2012 23:44 AsciiWolf | skóre: 41 | blog: Blog
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
+1 :-)
23.9.2012 16:51 CiV | skóre: 3
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Odpovědět | Sbalit | Link | Blokovat | Admin
Pekny prispevek. Pouzivam zsh uz dlouho, ale treba nastavovani barev pres %F{barva} vidim poprve.

Mezi killer funkce (aspon tedy pro me) patri automaticke opravovani. To bych urcite v nejakem pristim blogu zminil.
mirec avatar 23.9.2012 17:00 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Opravovanie používam asi tak automaticky, že som naň úplne zabudol :-) Ďakujem za tip.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
23.9.2012 17:23 Miloslav Ponkrác
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Odpovědět | Sbalit | Link | Blokovat | Admin
Přemluvil jsi mě. :-)

Jdu se shánět pro z shellu.
Václav 23.9.2012 17:31 Václav "Darm" Novák | skóre: 26 | blog: Darmovy_kecy | Bechyně / Praha
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Odpovědět | Sbalit | Link | Blokovat | Admin
Tohle by fakt mělo vyjít jako článek, bez ZSH už nedám dlouho ani ránu :)
Cross my heart and hope to fly, stick a cupcake in my eye!
mirec avatar 23.9.2012 17:53 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Ja občas sadnem aj za bash, ale veru zdá sa mi to oproti ZSH už ako za trest ;-)
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
23.9.2012 19:53 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Odpovědět | Sbalit | Link | Blokovat | Admin
Na rozdiel od bash-u si zsh výsledky vyhľadávania po sebe pekne „uprace“ a po pustení príkazu nebude doplňovanie nikde v histórii.

Nevšiml jsem si, že by mi bash při použití autocompletion ukládal do historie něco jiného než příkaz, který jsem nakonec opravdu odeslal.

mirec avatar 23.9.2012 19:58 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Bola myslená hystória terminálu (tj. väčšinou shift + page up). V bashi funguje dopĺňanie tak, že sa vypíšu možnosti a následne sa zopakuje prompt zatiaľ čo zsh zobrazuje completion pod promptom a po dokončení dopĺňania hinty vymaže. Pri zsh teda môžem pekne scrollovať v termináli hore a v histórii terminálu mám len príkazy ktoré som skutočne spúšťal, nie hinty shellu.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
23.9.2012 20:16 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Takže ne v historii ale na terminálu. I tak je to zajímavé, ale znamená to ne úplně samozřejmé požadavky na schopnosti toho terminálu.
Josef Kufner avatar 25.9.2012 22:42 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Odmazání posledního řádku není nijak exotická operace. Ale je fakt, že třeba gvim tohle neumí...
Hello world ! Segmentation fault (core dumped)
25.9.2012 23:22 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Jednoho možná ne. Ale možností doplnění může být tolik, že se nemusejí vejít ani na stránku.
23.9.2012 20:19 dumblob | skóre: 10 | blog: dumblog
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Odpovědět | Sbalit | Link | Blokovat | Admin
Pekne. Sice drtivou vetsinu zminenych feature (vcetne tipu zminenych pro pristi dil "clanku") mam jiz v bashi bez obezlicek, ale presto se shanim po shellu, ktery by umel vyhledavat v historii case-insensitive. Umi toto ZSH?

<rejp>Nemam rad takovehle molochovate non-POSIX shelly, ale jestli je ZSH alespon tak rychly jako bash, tak bych ho mozna zkusil (nejradeji mam mksh, i kdyz mu malinko chybi uzivatelska privetivost v nekterych ohledech).</rejp>
23.9.2012 20:37 dumblob | skóre: 10 | blog: dumblog
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
oprava:

...non-POSIX shelly (ve smyslu, ze nabizeji vlastni rozsireni k POSIX - tim nemam na mysli funkcionalitu pro rozsireni uzivatelskeho komfortu v interaktivnim rezimu) rad, ...
23.9.2012 22:06 Podivný host
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Nevím jestli se od té doby bash nezrychlil, ale jeden z důvodů proč jsem přešel na zsh bylo rychlejší doplňování.
mirec avatar 23.9.2012 22:13 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Studený štart jednoznačne v prospech bash. Normálny štart bash 0.15s, zsh 0.11s. Memory footprint asi 100kB v prospech bash. Rýchlosť doplňovania jednoznačne rýchlejšia u zsh (zsh toho dosť cachuje). Okrem toho má ZSH systém lazy loadovania skriptov, takže kým sa niečo nepoužije ani sa to nenačítava.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
23.9.2012 22:30 dumblob | skóre: 10 | blog: dumblog
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Diky za informace. Mel jsem spise na mysli rychlost provadeni smycek, praci s promennymi apod. (to vse pro POSIX kompatibilni kod). Napr.:

time (i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done)

atd.
mirec avatar 23.9.2012 22:38 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Tento konkrétny kód 1,09s zsh vs. 1.920s bash. Samozrejme relevantný benchmark to nie je ...
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
23.9.2012 22:41 dumblob | skóre: 10 | blog: dumblog
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Samozrejme to neni relevantni benchmark, ale v POSIX shell skriptech casto pouzivam iteraci nad jednoduchymi operacemi a casto forkuji apod., takze proto me zrovna takovyto "vykon" zajima.
24.9.2012 00:53 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Pouzi v bashi [[ namiesto [ a vyjde ti to priblizne rovnako.
If you hold a Unix shell up to your ear, you can you hear the C.
mirec avatar 24.9.2012 07:52 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Nie som teraz pri tom istom stroji, takže porovnanie rýchlosti [[ vs. [ nebude relevantné.

Bash - 0.991s, zsh - 0.51s.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
xkucf03 avatar 24.9.2012 08:01 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Je otázka, jestli je to vůbec relevantní – při interaktivní práci to nepoznáš a při dávkovém zpracování budou řádově víc trvat jiné operace (např. spouštění a běh jiných procesů).. Pokud by záleželo na výkonu, tak bys to stejně asi přepsal do C nebo do nějakého jazyka, ve kterém uděláš všechno a nemusíš kvůli každé blbosti pouštět jiný program.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
24.9.2012 09:21 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
$ time (i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done)

real    0m3.343s
user    0m3.200s
sys     0m0.080s

$ time (i=0; while [[ $i -lt 100000 ]]; do i=$((i+1)); done)

real    0m1.847s
user    0m1.780s
sys     0m0.060s

$ time (i=0; while [[ $i -lt 100000 ]]; do ((i++)); done)

real    0m1.566s
user    0m1.490s
sys     0m0.070s
To posledne len pre zaujimavost, ze rozne sposoby zapisu nie su uplne rovnake, ale maju vplyv na rychlost. Samozrejme vacsinou to vyznam nema, ako som sa naucil v praci - co sa vykonava konstantny pocet krat je rychle a co sa alokuje na konstantnu velkost je male. Pri realnych obrovskych casoch a obrovskych datach je nejaka rychlost inicializacie a velkost konstatnych struktur doslova zanedbatelna.

Ale uz som programoval v bashi vascie veci, kde mi tento suborovo-textovy nastroj tak ulahcoval zivot, ze sa mi to prepisovat do C nechcelo. A tam ma vyznam pouzit o o znak viac alebo menej a opvlyvnit rychlost o citelu dobu. A uvazovat, ze spustanie noveho procesu je az posledna moznost ako nieco vyriesit.
If you hold a Unix shell up to your ear, you can you hear the C.
mirec avatar 24.9.2012 09:47 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Ale uz som programoval v bashi vascie veci, kde mi tento suborovo-textovy nastroj tak ulahcoval zivot, ze sa mi to prepisovat do C nechcelo.

Na tieto prípady skôr používam python / perl. Malý benchmark tu:

time perl test.pl

real	0m0.014s
user	0m0.010s
sys	0m0.003s


time python test.py 

real	0m0.049s
user	0m0.040s
sys	0m0.007s


time (i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done) #bash

real	0m1.940s
user	0m1.850s
sys	0m0.057s


time (i=0; while [[ $i -lt 100000 ]]; do i=$((i+1)); done) #bash

real	0m1.004s
user	0m0.953s
sys	0m0.043s
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
David Watzke avatar 26.9.2012 11:28 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
(Pro srovnani)
$ time (i=0; while [[ $i -lt 100000 ]]; do i=$((i+1)); done)

real	0m0.889s
user	0m0.830s
sys	0m0.040s
Jeste rychlejsi varianta:
$ time (i=0; while (( i < 100000 )); do ((i++)); done)

real	0m0.811s
user	0m0.760s
sys	0m0.040s
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
26.9.2012 19:53 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Tak
time for((i=0; i < 100000;)); do ((i++)); done
trva cca polovicu z toho, co
time (i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done)
ale slo mi o porovnanie co najpodobnejsieho prikazu, aby z toho sla vyvodit rychlost shellu a nie optimalizacia programatora. Pretoze fakt optimalizacia je
i=100000
If you hold a Unix shell up to your ear, you can you hear the C.
24.9.2012 10:40 dumblob | skóre: 10 | blog: dumblog
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Cele vlakno navazujici na tento post je pro me irelevantni. Hned zprvu jsem napsal, ze me zajima vykon POSIX kompatibilnich skriptu, a to prave proto, ze vim o techto "vylepsovacich", ktere nejsou prenositelne (coz si ja nemohu bohuzel/bohudik dovolit :-().

Ale presto diky za testiky na vasich masinkach - asi zsh vyzkousim (to reverse case-insensitive hledani v historii me vazne zajima). Jinak na me starsi masince bash 0m1.030s a zsh 0,610 (vybrane nejlepsi casy ze 4 mereni).
mirec avatar 24.9.2012 08:15 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Vyhľadávanie je podľa manuálovej stránky zle case insensitive pokiaľ vyhľadávaný výraz obsahuje len malé písmena.
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
23.9.2012 22:24 podlesh
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Odpovědět | Sbalit | Link | Blokovat | Admin
Pamatuji časy kdy killer feature zsh bylo doplňování, ale to už bash (a ostatní) v podstatě dohnal.

Barvičky, terminál, hmmm... no každý podle svého gusta, ale určitě nejsem jediný koho to neadchne. Takže by myslím bylo vhodné minimálně umínit globbing (wilcards), to je opravdu killer feature.

23.9.2012 22:25 podlesh
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
s/umínit/zmínit/
mirec avatar 23.9.2012 22:40 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Priznám sa, že globbing moc neovládam. Vlastne ani zsh moc neovládam, pri písaní blogu sa ho učím konfigurovať ;-) Aspoň sa tak dokopem k tomu aby som skutočne rozumel tomu čo konfigurujem ;-)
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
pavlix avatar 24.9.2012 00:31 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Ale i tak je to dost dobré na to, abys to dělal při psaní článku :).
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
Václav 24.9.2012 09:23 Václav "Darm" Novák | skóre: 26 | blog: Darmovy_kecy | Bechyně / Praha
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Odpovědět | Sbalit | Link | Blokovat | Admin
Zajímavá funkce ZSH je prompt i na pravé straně (osobně tam mám nastavenou celou aktuální cestu, když k němu při psaní příkazu člověk dojde, zmizí aby nepřekážel)
Cross my heart and hope to fly, stick a cupcake in my eye!
24.9.2012 09:25 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Odpovědět | Sbalit | Link | Blokovat | Admin
Inak trik so zobrazovanim navratovej hodnoty predchadzajuceho prikazu v bashi cervenou farbou, ale iba ak bola nenulova je ${?/#0/}, takze nerusi, ak bolo vsekto OK. A je to bez spustania noveho procesu. Niekde tu by mala byt v historii diskusia, kde som bol tymto osvieteny, ale uz ju neviem dohladat.

Takze moj prompt riesi hodne veci:
PS1='\[\033[01;32m\]\u@\h \[\033[01;36m\]\W \[\033[01;31m\]${?/#0/}\[\033[01;36m\]\$ \[\033[00m\]'
a samotna idea bez farbiciek:
PS1='\u@\h \W ${?/#0/}\$ '
If you hold a Unix shell up to your ear, you can you hear the C.
mirec avatar 24.9.2012 10:59 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Pre doplnenie ten istý prompt v ZSH:
PS1='%n@%m %~ %0(?..%?)$ '
PS1='%B%F{green}%n@%m %F{cyan}%~ %F{red}%0(?..%?)%F{cyan}$ %f%b'
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
limit_false avatar 24.9.2012 12:57 limit_false | skóre: 23 | blog: limit_false
Rozbalit Rozbalit vše globbing, zmv, configure
Odpovědět | Sbalit | Link | Blokovat | Admin
Mne puvodne premluvil na zsh hlavne globbing. Moznosti je tam skutecne mnoho (man zshexpn), nektere globy ktere bezne pouzivam:
ls **/foo*.cpp    # ** matchuje rekurzivne do libovolne hloubky adresaru; btw ** je podporovan i ve vim-u
ls **/foo*(.)     # (.) na konci globu znaci jenom regulerni soubory
ls **/foo*(/)     # (/) na konci globu znaci jenom adresare
ls (#i)*foo*      # (#i) je case-insensitive match
ls foo*~foo*bar   # ~ je vyjimka - vsechny foo*, ale ne ty, ktere matchuji foo*bar
zmv je prejmenovavaci utilita s zsh globbingem a capture groups (do ~/.zshrc pridat na zapnuti 'autoload zmv'):
zmv 'DSCN([0-9]).jpg' 'Tajny_plan_na_dobyti_mesice_$1.jpg' # veci v zavorkach se substituuji za $1, $2, ...
zmv '(*)' '${(L)1}' # vyraz ${(L)} lowercasuje operand - vhodne pri mixu souboru pochazejicich z ruznych OS
Perlicka - automaticke parsovani optionu z ./configure i se zobrazenim napovedy k optionum. Napr. kdyz si nepamatuji --with or --enable:
./configure --with<TAB>
When people want prime order group, give them prime order group.
24.9.2012 15:00 dumblob | skóre: 10 | blog: dumblog
Rozbalit Rozbalit vše Re: globbing, zmv, configure
Jo, tohle jsem take nikdy nepochopil - v POSIX je z duvodu zpetne kompatibility pritomny jisty, velice jednoduchy globbing. Ale mne proste nejde do makovice, proc se shelly nevydaly cestou encoding-aware regexpu. Vzdyt to je mnohem citelnejsi, prehlednejsi, mocnejsi atd.

V ERE nevidim zadnou nevyhodu. Nemate nekdo nejake blizsi informace proc tomu tak je (treba zde ma nekdo znameho z The Open Group :-))? A proce maji takovehle "advanced" shelly jako zsh tendenci vymyslet nove speciality namisto pouziti ERE?
24.9.2012 16:19 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: globbing, zmv, configure
1. a 4. je aj v bashi, aj ked 1. chce zapnut shopt -s globstar a 4. chce shopt -s nocaseglob
If you hold a Unix shell up to your ear, you can you hear the C.
24.9.2012 18:02 mseed | skóre: 21 | blog: FastLinux
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Odpovědět | Sbalit | Link | Blokovat | Admin
.zshrc pro inspiraci
24.9.2012 20:24 depka | skóre: 20 | blog: eterity
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Odpovědět | Sbalit | Link | Blokovat | Admin
taky vam vyskakuje javascript alert?
24.9.2012 20:32 Neel | skóre: 10
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Ano. Asi je tu neco rozbite.
24.9.2012 20:55 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Prostě jen autor jednoho příspěvku použil <pre class="brush: ..."> s jazykem, který ten udělátor nezná. Asi si napíšu GreaseMonkey skript, který všechny ty "brush: ..." nahradí starým dobrým "kod", stejně mi to přijde přehlednější než ty barvičky.
24.9.2012 20:58 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Ale jestli myslíte to, že ten nesmysl při neznámém jazyku vyhazuje alert místo toho, aby tiše použil rozumný default, tak ano, to bych směle označil za rozbité.
mirec avatar 24.9.2012 21:17 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Áno, inak je minimálne divné, že to nevyhadzuje výnimku. Myslím, že by bola rozumnejšia než alert ;-)
LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
xkucf03 avatar 24.9.2012 21:25 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: ZSH - viac než len náhrada za Bash
Opraveno.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.