abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 22:22 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).

    Ladislav Hagara | Komentářů: 0
    včera 19:11 | IT novinky

    Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.

    Ladislav Hagara | Komentářů: 2
    včera 11:22 | Zajímavý projekt

    Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.

    Ladislav Hagara | Komentářů: 1
    včera 09:11 | Bezpečnostní upozornění

    Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.

    Ladislav Hagara | Komentářů: 0
    1.5. 20:00 | Komunita

    V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.

    Ladislav Hagara | Komentářů: 1
    1.5. 19:22 | IT novinky

    Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).

    Ladislav Hagara | Komentářů: 0
    30.4. 22:33 | Nová verze

    Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.

    Ladislav Hagara | Komentářů: 0
    30.4. 17:44 | Zajímavý článek

    Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.

    karkar | Komentářů: 0
    30.4. 12:11 | Humor

    Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).

    Ladislav Hagara | Komentářů: 7
    30.4. 10:44 | IT novinky

    Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.

    Ladislav Hagara | Komentářů: 36
    Jaký filesystém primárně používáte?
     (58%)
     (1%)
     (9%)
     (21%)
     (4%)
     (1%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 506 hlasů
     Komentářů: 19, poslední 30.4. 11:32
    Rozcestník

    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

    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    .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
    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   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.