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í
×
    dnes 01:44 | Pozvánky

    Přemýšlíte, jak začít prázdniny? Už v úterý 1. července se bude konat Virtuální Bastlírna, tedy online setkání bastlířů, techniků, vědců i akademiků, kde se ve volné diskuzi probírají novinky ze světa techniky, ale i jiných zajímavých témat.

    Za poslední měsíc jsme byli svědky plamenů několika raket. Zatímco malá raketa od Hondy se úspěšně vznesla a opět přistála, raketa od SpaceX se rozhodla letět všemi směry najednou. Díkybohu méně … více »
    Uprdkávač | Komentářů: 0
    včera 23:44 | Komunita

    Linus Torvalds zmínil, že souborový systém Bcachefs zřejmě odstraní z mainline Linuxu v začleňovacím okně pro vydání 6.17. Kent Overstreet mu totiž posílá kód s novou funkcionalitou i pro začlenění do kandidátů na vydání, kdy očekává pouze opravy chyb. Kent Overstreet byl již dříve z vývoje vyloučen kvůli konfliktní komunikaci.

    Fluttershy, yay! | Komentářů: 9
    27.6. 11:55 | IT novinky

    Ministerstvo průmyslu a obchodu propaguje Microsoft. Ten ve spolupráci s Ministerstvem průmyslu a obchodu spouští AI National Skilling Plan v ČR. "Iniciativa Microsoftu přináší konkrétní a praktickou podporu právě tam, kde ji nejvíc potřebujeme – do škol, firem i veřejné správy.", říká ministr průmyslu a obchodu Lukáš Vlček.

    Ladislav Hagara | Komentářů: 29
    27.6. 10:55 | Zajímavý projekt

    Jste český ISP? Vyplněním krátkého dotazníku můžete pomoci nasměrovat vývoj nové generace routerů Turris Omnia [𝕏].

    Ladislav Hagara | Komentářů: 4
    27.6. 01:33 | IT novinky

    Celkové tržby společnosti Canonical za rok 2024 byly 292 milionů dolarů (pdf). Za rok 2023 to bylo 251 milionů dolarů.

    Ladislav Hagara | Komentářů: 1
    27.6. 01:22 | Nová verze

    Byla vydána verze 1.88.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    27.6. 01:11 | Nová verze

    Distribuce Tails specializující se ochranu online soukromí uživatele byla vydána ve verzi 6.17. Mimo jiné aktualizuje Tor Browser (14.5.4) a opravuje několik chyb.

    Fluttershy, yay! | Komentářů: 0
    26.6. 21:11 | Nová verze Ladislav Hagara | Komentářů: 0
    26.6. 13:11 | IT novinky

    Město Lyon posiluje svou digitální suverenitu a postupně nahrazuje software od společnosti Microsoft bezplatnými alternativami, zejména OnlyOffice pro kancelářské aplikace a Linux a PostgreSQL pro systémy a databáze.

    Ladislav Hagara | Komentářů: 9
    26.6. 11:44 | Zajímavý projekt

    Evropská občanská iniciativa Stop Destroying Videogames se snaží o to, aby vydavatelé, kteří spotřebitelům v Evropské unii prodávají videohry nebo na ně udělují licence, měli povinnost tyto hry ponechat ve funkčním (hratelném) stavu i po ukončení podpory ze své strany. Podpořit podpisem tuto iniciativu můžete v Systému pro online sběr podpisů.

    trekker.dk | Komentářů: 5
    Jaký je váš oblíbený skriptovací jazyk?
     (59%)
     (28%)
     (7%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 331 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    Rozcestník

    Bash, Dash a read -n 1

    14.2.2012 00:15 | Přečteno: 1300×

    Aneb příběh o tom, jak dokáže inovace brzdit

    Tak jsem nedávno řešil problém s mým bashovým skriptem. Že spustím příkaz v terminálu bez problémů, ale jako sh skript.sh už si ani neškrtnu jsem si zvyknul. Nejčastější problém je podmínka if, vždycky vypisuje chybu ať udělám snad cokoli. Ale už jsem se naučil jak ji napsat tak, aby neprotestovala (dost neefektivně).

    Na(ne)štěstí jsem v posledním pokusu (smyčka while) potřeboval použít read -n 1....a nastaly problémy. Skript měl načíst jeden znak, rovnou podle case spustit přiřazený příkaz a znovu se ptát....a takhle dokola. Bohužel co se (ne)stalo - terminál se mi začal plnit hromadou textu o tom, že read -n 1 opravdu není to co chci a že to nebude fungovat.

    Vydal jsem se na cestu a ptal se Google, který mi (jako vždy, stačí se umět ptát) odpověděl, kde je zakopaný.....silový vodič :-D  Ten, co mě silovým polem nutí přepisovat skripty. Ano přátelé.....byl to Dash! Díky svému výcviku jsem obratem v terminálu jako root napsal dpkg-reconfigure dash (snad jen tohle) a Dash poslal na dlouhou dobu pryč.

     

    I začalo mi ale vrtat hlavou, proč se na prvních řádcích snad všech Bashových skriptů objevuje:

    #!/bin/bash

    #!/bin/env bash

    ....a možná i několik dalších alternativních zápisů. Proč píšu že chci Bash, když mi skript pořád běží přes Dash? To bych to tam skoro ani nemusel psát. Teď mě tak v polospánku napadá použít podmínku a pokud se skript pustí v Dashi, tak jen vypsat něco ve smyslu "tudy cesty nevede, spust mě tak a tak", případně zařídit aby při běhu v Dashi sám sebe znova spustil v Bashi....otázka je, jestli se dřív něco nezacyklí a nevznikne vidličková bomba. Nemluvě o tom, že se jedná o prasárnu nejvyššího kalibru :-D  Ale mě to stačí, hlavně když to bude fungovat....za předpokladu že je to čistě pro vnitřní účely a nebudu to šířit ven ;-)

     

    Chtěl bych se zeptat zasvěcených, jak je to s tím #!/bin/bash ? Znamená to, že se má skript spustit v Bashi, nebo jen konstatování že je to Bashový skript a dělej si s tim co chceš? Upřímně řečeno, psát bash manual.sh proti sh manual.sh je krok zpět, obzvlášť když to u mě funguje stylem sh m[TAB], Efektivita především....ale nechci slyšet že se mám učit Python nebo C, jsem na elektroškole a psaní bashových skriptů mám jen jako takovou berličku (například neskutečně neefektivní skript pro počítání RLC obvodů a generováním grafu přes GNUplot).

           

    Hodnocení: 33 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    14.2.2012 00:24 Dr. Eddy | skóre: 9 | blog: glog | České Budějovice
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    #!/bin/bash na zacatku udava, v jakem interpreteru se ma soubor spustit. Takze tam muzes napsat treba #!/usr/bin/python nebo podobne a melo by se to pustit jako python skript.

    Urcite neni hezke, ze bash-skripty ti pousti Dash. Hadam, ze tam mas symlink...
    14.2.2012 00:59 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Není náhodou /bin/sh symlink na /bin/dash?
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    Marián Kyral avatar 14.2.2012 07:33 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Tak tak. Podle mně stačílo skript spustit rovnou (./script) a ono by to začalo fungovat.
    14.2.2012 06:03 retroslava | skóre: 9 | blog: TryCatch | Žižkoff
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1

    No pokud máš tohle nahoře, tak dej na soubor chmod +x a pak ho spouštěj přímo ./soubor.sh. A on se právě spustí v tom, co je nahoře. Říká se to mu shebang myslim. http://en.wikipedia.org/wiki/Shebang_(Unix)

    Pozor! Jsem naprostý idiot. Co jsem napsal včera dnes už dávno neplatí. Zavazuji se, že budu diskutovat nezávazně.
    Dreit avatar 14.2.2012 14:03 Dreit | skóre: 15 | blog: Dreit a jeho dračí postřehy | Královehradecký kraj
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1

    Díky moc za osvětlení, koukám že jsem větší lama než jsem si myslel :-)

    Nope
    gtz avatar 14.2.2012 20:52 gtz | skóre: 27 | blog: gtz | Brno
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    :-)
    - nejhorší jsou trpaslíci ... Ti Vám vlezou úplně všude
    14.2.2012 08:30 fík
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Že spustím příkaz v terminálu bez problémů, ale jako
    perl skript.py
    už si ani neškrtnu, jsem si zvyknul...
    14.2.2012 12:23 já
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    :-))) pobavil jsem se
    pavlix avatar 14.2.2012 13:31 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    +1!
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    14.2.2012 09:01 Stevko | skóre: 3 | Praha
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Keď spústíš skript spôsobom ./skript.sh, tak sa vykoná klasický fork() a exec() a jadro sa pozrie na #! a podľa toho spustí správny interpret. Keď spustíš sh skript.sh, tak sa spustí sh (v tomto prípade dash) a ako prvý riadok vidí komentár (začína to znakom #) a pokračuje ďalej vo vykonávaní. A možno je to úplne ináč a ja píšem hlúposti.
    Príspevok nemá byť ukončený spojením „môj názor“.
    Dreit avatar 14.2.2012 14:04 Dreit | skóre: 15 | blog: Dreit a jeho dračí postřehy | Královehradecký kraj
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1

    Mám dojem že je to přesně takhle

    Nope
    14.2.2012 09:27 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Aneb příběh o tom, jak dokáže inovace brzdit
    Omlouvám se, ale nikde jsem tuhle část nenašel. Zápisek je jenom o tom, že máte drobet chaos v termitech. Pokud jsem něco přehlédl, mohl byste tu část zvýraznit?
    When your hammer is C++, everything begins to look like a thumb.
    14.2.2012 09:34 loki
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Pokud budes mit soubor.sh:
    #!/bin/bash
    echo "Ahoj"
    potom priradis spousteci prava:
    chmod +x soubor.sh
    nasledne lze skript spustit klasicky takto:
    ./soubor.sh
    Prvni radek urcuje interpret, ve kterem se skript spusti. Nemusi tam byt jen bash.

    Pokud spoustis skript timto zpusobem:
    sh soubor.sh
    a nefunguje to, tak ti patrne sh (asi symlink) miri na spatny shell - alespon u mne miry /bin/sh na dash (debian testing). Doporucuji tedy spousteni jako
    ./soubor.sh
    ale pokud trvas na
    sh soubor.sh
    tak toto by mohlo byt reseni:
    rm /bin/sh
    ln -s bash /bin/sh
    Snad to pomuze.
    14.2.2012 13:32 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Případně pokud z nějakých důvodů nechce používat ./script.sh, ať udělá

    bash script.sh

    Pro autora blogu: sh je NĚJAKÝ shell, může to být bash, dash, ksh, ale taky klidně třeba něco úplně jiného...

    Bash je konkrétní shell.

    Všechny shelly umí nějakou společnou syntaxi vycházející z nějakých historických standardů a můžeš si napsat shell skript, který pojede ve všech shellech. Třeba na freebsd nebo solarisu bash být nemusí.

    Pokud chceš využívat vychytávky bashe, není problém, ale pak to nepouštěj pomocí sh, ale pomocí bashe ;-).

    Takže v čem je sakra problém? :-)
    Baník pyčo!
    14.2.2012 13:34 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Jinak ještě dash je v tvé distrubuci výchozí shell proto, protože výchozím shellem se pouští startovací skripty. A Bash je pomalý. Dash je rychlejší a proto ti rychleji naběhne systém - za to jsi rád ne? Pokud si jako vychozí shell nastavíš bash, vše bude OK, ale o to zrychlení příjdeš.

    V terminálu se ti ale už samozřejmě pouští bash, protože bash je pro interaktivní práci mnohem příjemnější (to nic nemění na tom, že když si zavoláš přes příkaz sh služby dashe, tak s tím bash nic nezmůže, jak jsem psal výše, používej bash skript).
    Baník pyčo!
    Dreit avatar 14.2.2012 14:10 Dreit | skóre: 15 | blog: Dreit a jeho dračí postřehy | Královehradecký kraj
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1

    Děkuju a pro příště se poučim.

    Teď koukám, zdá se mi to, nebo funguje alias? :-D  alias sh='bash'

    Nope
    Jakub Lucký avatar 14.2.2012 14:21 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Alias ti bude fungovat, protože Bash zvládá všechny konstrukce, které dash (ale ne obráceně)... Ale všechno, co používá sh bude teď pomalejší...
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    Dreit avatar 14.2.2012 15:24 Dreit | skóre: 15 | blog: Dreit a jeho dračí postřehy | Královehradecký kraj
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1

    Hmm....díky za info, zkusim vymyslet něco lepšího....a možná už mám nápad :-)

    Nope
    Jakub Lucký avatar 14.2.2012 15:52 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    A co chcete proboha používat?

    Používejte hashbang a spouštějte skripty tak jak se mají, se spustitelnými právy...
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    14.2.2012 18:17 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Pokud si to dá do ~/.bashrc, žádné zpomalení nepozná. To se týká spíše startovacích skriptů a těch se tohle nijak nedotkne...
    Baník pyčo!
    14.2.2012 10:33 tomboytom
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    chytré hlavy: setkal jsem se nedávno s chybou "sh: Syntax error: newline unexpected " u kódu curl http://j.mp/spf13-vim3 -o - | sh. To vše na Ubuntu 11.10. Za to může taky ten slavnej dash?
    14.2.2012 12:41 polymorf | skóre: 14 | blog: tar_zxpf
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    skusil by som dotycny skript a/alebo doticny stahovany subor prebehnut cez dos2unix
    Jakub Lucký avatar 14.2.2012 13:04 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    A proč to nevyzkoušíte?

    curl http://j.mp/spf13-vim3 -o - | bash

    curl http://j.mp/spf13-vim3; checkbashisms spfl13-vim3
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    Jakub Lucký avatar 14.2.2012 11:32 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Ach bože, proč lidi používají sh, když chtějí bash?
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    pavlix avatar 14.2.2012 13:33 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    +1
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Dreit avatar 14.2.2012 14:11 Dreit | skóre: 15 | blog: Dreit a jeho dračí postřehy | Královehradecký kraj
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1

    ....protože ve škole se učili jen TurboPascal a Javascript :-(

    Nope
    Jakub Lucký avatar 14.2.2012 16:42 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Já se ve škole učil akorát Word a HTML...
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    edois avatar 14.2.2012 15:32 edois
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Zásadně #!/usr/bin/env bash, na FreeBSD třeba bash vůbec není v /bin.
    pavlix avatar 14.2.2012 15:46 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Jasně, a až narazíš na systém, kde env není v /usr/bin, tak budeš zásadně za co? :)

    IMO je ten hack s /usr/bin/env prasárna a měl by se postupně vymýtit. Jo... kdyby obecně v distribucích fungovalo něco rozumného (např.: #!bash, #!python apod), tak by to bylo mnohem lepší.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    14.2.2012 16:12 loki
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    #!$(which bash) ? :-) Skoda, ze to nejde... ;-)
    15.2.2012 12:53 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Jo... kdyby obecně v distribucích fungovalo něco rozumného (např.: #!bash, #!python apod), tak by to bylo mnohem lepší.
    Chystá se něco lepšího
    When your hammer is C++, everything begins to look like a thumb.
    pavlix avatar 20.2.2012 00:10 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Lepšího to sice není, ale taky to pomůže.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Bystroushaak avatar 15.2.2012 18:56 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Bash, Dash a read -n 1
    Zatím jsem nenarazil :) Ale už jsem několikrát opravoval pevně zadrátovaný interpreter, který nebyl tam kde si autor myslel že bude.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.