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 15:11 | IT novinky

    Miliardy korun na digitalizaci služeb státu nestačily. Stát do ní v letech 2020 až 2024 vložil víc než 50 miliard korun, ale původní cíl se nepodařilo splnit. Od loňského února měly být služby státu plně digitalizované a občané měli mít právo komunikovat se státem digitálně. Do tohoto data se povedlo plně digitalizovat 18 procent agendových služeb státu. Dnes to uvedl Nejvyšší kontrolní úřad (NKÚ) v souhrnné zprávě o stavu digitalizace v Česku. Zpráva vychází z výsledků víc než 50 kontrol, které NKÚ v posledních pěti letech v tomto oboru uskutečnil.

    Ladislav Hagara | Komentářů: 0
    dnes 13:55 | IT novinky

    Nadace Wikimedia, která je provozovatelem internetové encyklopedie Wikipedia, oznámila u příležitosti 25. výročí vzniku encyklopedie nové licenční dohody s firmami vyvíjejícími umělou inteligenci (AI). Mezi partnery encyklopedie tak nově patří Microsoft, Amazon a Meta Platforms, ale také start-up Perplexity a francouzská společnost Mistral AI. Wikimedia má podobnou dohodu od roku 2022 také se společností Google ze skupiny

    … více »
    Ladislav Hagara | Komentářů: 0
    dnes 02:22 | Nová verze

    D7VK byl vydán ve verzi 1.2. Jedná se o fork DXVK implementující překlad volání Direct3D 5, 6 a 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.

    Ladislav Hagara | Komentářů: 0
    dnes 02:00 | Nová verze

    Byla vydána verze 12.0.0 knihovny libvirt (Wikipedie) zastřešující různé virtualizační technologie a vytvářející jednotné rozhraní pro správu virtuálních strojů. Současně byl ve verzi 12.0.0 vydán související modul pro Python libvirt-python. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 19:22 | Humor

    CreepyLink.com je nový zkracovač URL adres, 'díky kterému budou vaše odkazy vypadat tak podezřele, jak je to jen možné'. Například odkaz na abclinuxu.cz tento zkracovač převádí do podoby 'https://netflix.web-safe.link/logger_8oIlgs_free_money.php'. Dle prohlášení autora je CreepyLink alternativou ke zkracovači ShadyURL (repozitář na githubu), který dnes již bohužel není v provozu.

    NUKE GAZA! 🎆 | Komentářů: 3
    včera 12:33 | IT novinky

    Na blogu Raspberry Pi byla představena rozšiřující deska Raspberry Pi AI HAT+ 2 s akcelerátorem Hailo-10 a 8 GB RAM. Na rozdíl od předchozí Raspberry Pi AI HAT+ podporuje generativní AI. Cena desky je 130 dolarů.

    Ladislav Hagara | Komentářů: 3
    včera 12:11 | Komunita

    Wikipedie slaví 25. výročí svého založení. Vznikla 15. ledna 2001 jako doplňkový projekt k dnes již neexistující encyklopedii Nupedia. Doména wikipedia.org byla zaregistrována 12. ledna 2001. Zítra proběhne v Praze Večer svobodné kultury, který pořádá spolek Wikimedia ČR.

    Ladislav Hagara | Komentářů: 1
    včera 04:44 | Nová verze

    Po více než dvou letech od vydání předchozí verze 2.12 byla vydána nová stabilní verze 2.14 systémového zavaděče GNU GRUB (GRand Unified Bootloader, Wikipedie). Přehled novinek v souboru NEWS a v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 2
    včera 02:22 | Nová verze

    Google Chrome 144 byl prohlášen za stabilní. Nejnovější stabilní verze 144.0.7559.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 10 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře (YouTube).

    Ladislav Hagara | Komentářů: 4
    včera 01:55 | Humor

    Microsoft zveřejnil zdrojový kód XAML Studia a uvolnil ho pod MIT licencí. XAML Studio je nástroj ze světa Windows, určený pro tvorbu uživatelského rozhraní aplikací pomocí XAML (Extensible Application Markup Language). Stalo se tak zhruba po osmi letech od prvního prohlášení Microsoftu, že se tento kód chystá zveřejnit.

    NUKE GAZA! 🎆 | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (4%)
     (0%)
     (9%)
     (19%)
     (3%)
     (6%)
     (3%)
     (11%)
     (43%)
    Celkem 457 hlasů
     Komentářů: 12, poslední 14.1. 21:12
    Rozcestník

    Dotaz: Jak vyskočit z již spuštěné funkce read?

    13.11.2017 14:06
    Jak vyskočit z již spuštěné funkce read?
    Přečteno: 799×
    Chlapy prosím o pomoc, v Bash scriptu mám funkci read, po jejím spuštění něco zadám a dám enter a dále pracuji se zadaným textem. Může nastat situace, že spustím read, něco zadám a zjistím, že je to špatně, jak můžu pomocí klávesy Esc přerušit tu funkci read? Klidně to můžu dát do while a aplikovat na klávesu Esc jen break ale netuším jak. Našel jsem nějakou funkci trap ale je to tak složitý že to fakt nedám. Děkuji za případnou pomoc.

    Odpovědi

    13.11.2017 15:08 NN
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Odpovedel jsi si sam, nacitej ve smycce vstup dokud nebude vyhovovat tvym podminkam.
    13.11.2017 16:10
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    A jak do toho spadá ten stisk klávesy Esc?
    k3dAR avatar 13.11.2017 22:41 k3dAR | skóre: 63
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    tak ze v te smycce se bude detekovat jestli byl zmacknut ESC ;-)
    porad nemam telo, ale uz mam hlavu... nobody
    13.11.2017 16:15 odpoved
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    while (1) {if(read() != CHYBA) break;}
    13.11.2017 16:30
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Tohle určitě není příkaz který by šel spustit v bash.
    13.11.2017 16:50 odpoved
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    To je navrch riesenia v C resp. pseodokod. Tj. algoritmus. Uz si prepis syntax do jazyka v akom yo potrevujes a mas.
    13.11.2017 16:38 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Nejjednodušší bude, když ten read vyhodíš. Přestane to zlobit.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    13.11.2017 16:50
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Vyhodím odkud? Z toho mého kódu?
    13.11.2017 16:56 odpoved
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    To bol od neho napisana ironia/sarkazmus. Ignotuj jeho komentar.
    13.11.2017 17:06 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Správně. Vyhoď ho z kódu, protože pro tento typ práce se nehodí. Výhodnější bývá zadávání dat přes parametry spouštěcího příkazu:
    $ aplikace data1 data2
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    13.11.2017 17:13
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    A co ten trap či stty? Snad dokáže system odchytit kdykoli stisk klávesy esc, když dokáže odchytit exit, ctrl+c atd.. ne?
    13.11.2017 17:44 odpoved
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Exit je pseudo prikaz - priamo vykovavany bash.
    13.11.2017 18:37 dustin | skóre: 63 | blog: dustin
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Půjde to zřejmě jen přes čtení po jednotlivých znacích, ze kterých si musíš poskládat svůj text nebo končit. - tohle v bashi funguje:
    while true; do
      read -rd $'\0' -s -p ... -n 1
    
      case $REPLY in
        $'\e') echo "Escape"; exit;;
        $'\n') echo "Konec radky"; exit;;
        *) echo -n "$REPLY";;
      esac
    done
    
    String si postupně poskládáš z jednotlivých znaků (v default sekci casu), při enter nebo escape se rozhodneš dle potřeby.
    13.11.2017 19:59
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Díky, nějaká snaha tam je, ale vypisuje to pokaždé 3 tečky a hlavně po ukončení to vypisuje na terminál nějaké znaky :(
    13.11.2017 20:04 dustin | skóre: 63 | blog: dustin
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Co si takhle přečíst manuálové stránky k bashi? Tři tečky jsou parametrem read -p.

    Trochu samostatnosti by to chtělo, celé ti to psát nebudu.
    13.11.2017 20:37
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Tak to ses nemusel obtěžovat vůbec něco psát, já totiž nejsem programátor.
    13.11.2017 20:53 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Ctrl-C místo Esc jsi už zkusil?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    13.11.2017 21:09
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Crtl+C jsem zkoušel, to jsem našel, ale to ukončí úplně celý script. Já chci jen vyskočit z toho read.
    13.11.2017 21:42 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?

    Tady je řešení, které neukončí celý skript. Stačí jenom správně použít trap.

    13.11.2017 20:58 dustin | skóre: 63 | blog: dustin
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Máš to tam skoro celé hotové. Když nejsi ochoten nastudovat ani ten malý kousek, nedovedu si představit, jak napíšeš celý skript. Hodně štěstí.
    13.11.2017 21:07
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Já ho nepsal, po zdlouhavém bádání jsem zjistil, že to co napíšu zajišťuje funkce read a jediné co jsem chtěl je, ukončit tuto funkci tlačítkem Esc, nic víc.
    13.11.2017 18:49 RM
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Já bych použil 2xread, třeba takhle:
    read -n1 s1 && [ $s1 != $'\e' ] && read s2 && s="$s1$s2" && { echo "Zadáno: $s"; }
    
    13.11.2017 19:02 RM
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    vlastně to bude asi docela nepoužitelné, tak nic
    13.11.2017 19:11 RM
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Myslel jsem na použití pro případ: zruš pomocí Esc nebo zadej text.
    13.11.2017 21:38 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?

    To klidně jde, jenom je potřeba netrvat na ESC. Co takhle Ctrl+C? Tady je příklad, kde Ctrl+C funguje:

    #!/bin/bash
    
    do_something() {
      read -p 'Enter task name: ' input
      [[ "$input" = 'exit' ]] && return 1
      echo "Task running: ${input}"
      sleep 3
      echo "Task done: ${input}"
    }
    
    while ((0 == $?)); do (
      set -e
      do_something 0<&0 &
      PID=$!
      trap "kill $PID" INT
      status=0
      wait $PID || status=$?
      trap - INT
      case $status in
          1) echo 'Task encountered "exit" or end of input.'; exit 1 ;;
        130) echo 'Task interrupted by Ctrl+C.' ;;
          *) echo "Task finished with status ${status}." ;;
      esac
    ) done
    

    Tohle se zeptá na název nějakého úkolu, pak to předstírá, že něco dělá (3 sekundy spí — přesně tam se dá napsat, co to ve skutečnosti má dělat) a během celé rádoby-činnosti se to dá kdykoliv přerušit pomocí Ctrl+C, což se vrátí zase zpátky k promptu s názvem úkolu. Těch readů tam samozřejmě může být za sebou několik a kdykoliv se to pak bude dát přerušit s návratem na první prompt. Celé se to dá ukončit buď zadáním exit nebo ukončením vstupu pomocí Ctrl+D.

    Technická: Subshell v cyklu je především proto, aby se nevypisovaly na terminál obsáhlé hlášky o stavu ukončenéno procesu — stav zpracovává a hlásí ten case, takže ho není potřeba vidět od shellu ještě jednou. Jinak by se dalo obejít bez něj.

    INT (zvaný taky SIGINT) je ten signál, který skript dostane při stisku Ctrl+C.

    Mimochodem, tohle řešení má několik zjevných race condition v tom smyslu, že ve vzácných případech může být nutné stisknout Ctrl+C dvakrát a v podobně vzácných případech se shell pokusí zabít proces, který už neběží (či jiný nešťastný proces, který mezitím dostal stejný PID). Oba problémy se dají odstranit pomocí zamykání (což obvykle obnáší vytvořit si dočasný adresář (mktemp -d) a v něm vytvářet zamykací podadresář — mkdir může posloužit v shellu k implementaci poor man's mutexu). To ale tenhle triviální příklad nedělá.

    13.11.2017 22:01
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Páni, to mám do vánoc co dělat :( Jak se v tom může někdo vyznat, nechápu, já to neumím ani přečíst. S použitím tedy klávesy Esc to nejde, rozumím tomu dobře, jo? Škoda, že to řešení co poslal "dustin" píše ty paznaky při stisku šipek nebo při ukončení, proto že jinak to funguje podle mé představy, ale já to dodělat fakt nedokážu. Zatím všem velmi moc děkuji za pomoc a trpělivost.
    13.11.2017 22:45 dustin | skóre: 63 | blog: dustin
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Kristepane, mysli trochu. Vypisuje to, protože je tam echo. Je to polotovar, který se musí dodělat. Pokud potřebuješ zadávat nějaký řetězec a mít možnost to ukončit escapem, musíš si poskládat string z jednotlivých znaků. Pokud ti jde jenom o ukončení skriptu/bloku escapem, můžeš celou defaultní sekci case (tedy sekce pro vše ostatní kromě esc a enter) nechat prázdnou a znaky zahodit.

    Jinak pokud se nechceš nic učit, vybodni se na to, protože zrovna tento konkrétní požadavek patří v bashi k hodně složitým.
    13.11.2017 22:59 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Je to v Bashi složité zejména proto, že to tak v Bashi (téměř) nikdo nedělá a ani nechce dělat.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    13.11.2017 23:15
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Žádné echo tam nemám a přesto to vypisuje [A nebo [B nebo [C nebo [D nebo OP nebo OQ nebo [6~ nebo [2~ atd...
    while true; do
    read -rd $'\0' -s -n 1
    case $REPLY in
    $'\e') break;;
    $'\n') break;;
    esac
    done
    13.11.2017 23:24 dustin | skóre: 63 | blog: dustin
    Rozbalit Rozbalit vše Re: Jak vyskočit z již spuštěné funkce read?
    Kdyby sis do těch jednotlivých větví přidělal debugovací echo výpisy (např.
    $'\e') echo ESCAPE; break;;
    zjistil bys, že ty šipky ti ukončují na escape. O těchto znacích jsi nic neříkal a nyní se divíš, že to s nimi nefunguje. Samozřejmě, protože terminál za tyto znaky dostává tzv. escape sekvence, která, jak už vyplývá z názvu, začíná znakem escape. Detaily viz http://ascii-table.com/ansi-escape-sequences.php

    Zapomeň na ESC a použij to Ctrl+C, co ti tu všichni radí. Nebo se na to celé vybodni.

    Založit nové vláknoNahoru

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

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