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 03:33 | Nová verze

    V červnu byla představena aplikace Myna pro převod řeči na text v prostředí desktopu Ubuntu. Včera byla Myna zpřístupněna širší komunitě Ubuntu formou technologické ukázky dostupné v Ubuntu 24.04 LTS, Ubuntu 26.04 LTS a Ubuntu 26.10 s GNOME na Waylandu.

    Ladislav Hagara | Komentářů: 0
    včera 21:11 | Komunita

    Ubuntu 27.04 bude Tenacious T-Rex.

    Ladislav Hagara | Komentářů: 0
    včera 20:44 | Nová verze

    Byla vydána nová verze 2026.4.0 "Never-slop" svobodného softwaru ScummVM (Wikipedie) umožňujícího bezproblémový běh mnoha klasických adventur na zařízeních, pro které nebyly nikdy určeny. Přehled novinek v poznámkách k vydání a na GitHubu. ScummVM oslavil 25 let. Verze 0.0.1 vyšla 8. října 2001.

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

    Kanadský vývojář Anthony Sistilli vytvořil ironický DIY projekt parodující kamerové systémy Flock, s cílem názorně demonstrovat rizika masového sledování jaké provozují tyto komerční ALPR systémy. Z levné IP kamery a vlastního ML softwaru (napsaného s pomocí SI circa za 20 minut, kód se mi bohužel nepodařilo dohledat) běžícího v laptopu sestavil jednoduchý systém, který detekuje výhradně policejní vozidla, zaznamenává jejich SPZ a

    … více »
    ❗Červivý Hřib krade❗ | Komentářů: 6
    včera 12:44 | Upozornění

    Část údajů uživatelů internetového supermarketu Rohlík byla odcizena. Kyberútočníci napadli nástroj zákaznické podpory Rohlíku, odcizili tak jména, e-mailové adresy, v některých případech také telefonní čísla nebo přepisy komunikace mezi klienty a zákaznickou podporou. Rohlík incident nahlásil příslušným orgánům a přijal příslušné opatření, aby zamezil podobným případům v budoucnosti, uvedla firma.

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

    Aplikace eDoklady fungovala v obou volebních dnech stabilně a prakticky bez front. Digitální a informační agentura (DIA) odhaduje, že se digitálním dokladem prokázalo více než 100.000 voličů. Aplikaci si před volbami či během nich aktualizovalo 247.517 uživatelů. Nových registrací bylo 19.431 a do aplikace se přihlásilo 357.879 lidí. Největší nápor přišel bezprostředně po otevření volebních místností mezi 14. a 16. hodinou, kdy si

    … více »
    Ladislav Hagara | Komentářů: 8
    včera 00:55 | Pozvánky

    Začal semestr, začal i podzim a kromě hub rostou jako po dešti i veřejné dílny v Praze. Nedávno strahováci referovali o hackerspacu Bordel, nyní se otevřela dílna Dejvice Lab jen kousek od ČVUT. Na blížící Virtuální Bastlírně tak uslyšíte nejen report z návštěvy dílny HWLab, ale i řadu novinek, událostí a úsměvných momentů, které se za poslední měsíc ve světě techniky, ale i vědy udály. Připojte se tedy již v úterý 13.10. od 20:00 a zapojte se do

    … více »
    bkralik | Komentářů: 0
    11.10. 11:33 | Nová verze

    Byl vydán LineageOS 24 (Mastodon). LineageOS (Wikipedie) je svobodný operační systém pro chytré telefony, tablety a set-top boxy založený na Androidu. Jedná se o nástupce CyanogenModu. LineageOS 24 je založený na Androidu 17.

    Ladislav Hagara | Komentářů: 0
    11.10. 03:55 | IT novinky

    Společnost Valve publikovala na svém GitLabu nákresy a schémata zapojení headsetu Steam Frame. Pro nekomerční účely.

    Ladislav Hagara | Komentářů: 1
    10.10. 23:11 | Bezpečnostní upozornění

    Soutěž Pwn2Own Ireland 2026 skončila 9. října. Bezpečnostní výzkumníci získali celkem 1 262 000 dolarů na odměnách. Během soutěže bylo předvedeno zneužití 98 zero-day zranitelností. Testování zahrnovalo různé kategorie zařízení a software. Výzkumníci předváděli prakticky fungující útoky podle pravidel soutěže. Výsledky následně slouží výrobcům při přípravě oprav. Mezi pokořenými jsou: Samsung Galaxy S26, OpenAI Codex, Oracle Autonomous AI Database, Google Pixel 10, u iPhone 17 neuspěli.

    vencour | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2838 hlasů
     Komentářů: 32, poslední 11.10. 17:02
    Rozcestník

    Unixové nástroje – 16 (getopts, time, nohup)

    4. 8. 2010 | David Watzke | Návody | 14190×

    V tomto díle si ukážeme, jak zpracovávat přepínače v shellovém skriptu pomocí getopts, dále jak zjistit, kolik procesorového času spotřebovává daný program pomocí time, a také jak spustit program tak, aby jej nepřerušilo ukončení řídícího terminálu pomocí nohup.
    unixové nástroje icon

    Obsah

    getopts

    link

    Nástroj getopts slouží ke zpracování přepínačů a jejich argumentů, které jsou předány shellovému skriptu. Název je zkratkou get options, česky „získej přepínače/nastavení“.

    Obvykle se volá v cyklu while, dokud vrací návratovou hodnotu 0 (tzn. dokud neprojde všechny zadané přepínače). Použití vypadá takto:

    aopt=false
    bopt=false
    barg=""
    
    while getopts 'ab:' opt; do
      case "$opt" in
        a)
          aopt=true ;;
        b)
          bopt=true
          barg=$OPTARG ;;
      esac
    done
    
    if $aopt; then
      echo "Zadali jste přepínač -a"
    fi
    
    if $bopt; then
      echo "Zadali jste přepínač -b s argumentem $barg"
    fi
    

    Funguje to potom takto:

    $ ./skript -a
    Zadali jste přepínač -a
    
    $ ./skript -b
    ./skript: přepínač vyžaduje argument – b
    
    $ ./skript -b xy
    Zadali jste přepínač -b s argumentem xy
    
    $ ./skript -c
    ./skript: chybný přepínač – c
    

    Jako argument se předává nejdříve řetězec s přepínači, přičemž má-li určitý přepínač vyžadovat argument, přidá se za něj dvojtečka. Takže pokud chcete, aby váš program podporoval přepínače -a s argumentem -h a -v, řetězec bude vypadat takto: ,a:hv‘. Další argument je proměnná, kam se ukládá právě zpracovávaný přepínač anebo ,?‘, pokud jde o přepínač neznámý (tj. neuvedený v prvním argumentu getopts).

    getopts automaticky vypisuje chybové hlášení, pokud přepínač vyžaduje argument a vy jej nezadáte nebo pokud zadáte neznámý přepínač. V případě, že si chcete chybějící argument ošetřit sami, můžete do řetězce s argumenty přidat na začátek (před všechny přepínače) dvojtečku, což změní chování programu. Pokud nyní vynecháte argument, tak se do zadané proměnné (v ukázce výše je to $opt) uloží dvojtečka a znak přepínače vyvolávající tuto chybu se uloží do proměnné OPTARG. Je to možná trochu matoucí, proto přikládám jednoduchou ukázku:

    while getopts ':a:b:' opt; do
      case "$opt" in
        'a')
          aopt=true; aarg=$OPTARG ;;
        ':')
          echo "Přepínač -$OPTARG vyžaduje argument."
          exit 1 ;;
      esac
    done
    

    time

    link

    time je nástroj sloužící ke zjištění skutečné doby běhu daného příkazu a spotřebovaného procesorového času v uživatelském a jaderném prostoru. Název vychází z anglického slova, které v tomto kontextu znamená odměřit (čas).

    Použití je velmi jednoduché, zkrátka před samotný příkaz přidáte time, takže například příkaz

    time tar -jcf etc.tar.bz2 /etc
    

    zabalí a zkomprimuje adresář /etc do souboru etc.tar.bz2 a nakonec vypíše tři zmiňované časy:

    real    0m1.900s
    user    0m0.560s
    sys     0m0.067s
    

    Z tohoto vyplývá, že příkaz běžel 1,9 sekund (real) a využil 0.627 sekund procesorového času (user+sys), z čehož 0.560 sekund bylo v uživatelském prostoru (user) a zbylých 0.067 sekund v jaderném (sys).

    Chcete-li spustit time na složitý příkaz obsahující např. roury, máte několik možností. Pokud na to půjdete stejně jako u jednoduchého příkazu, tak je na implementaci, který čas se bude měřit (pouze jeden program, nebo i ty ostatní za rourami). Chcete-li mít jistotu, tak si buď příkaz uložte do skriptu a volejte time na skript, anebo použijte následující způsob:

    time sh -c "find ~ -iname thumbs.db -type f -print0 | xargs -0 rm" 
    

    Výstup příkazu time bez argumentů se v různých implementacích může lišit (a skutečně liší). Chcete-li jednotný formát, který by měl být ve všech standardních implementacích stejný, použijte přepínač -p. Výstup bude vypadat takto:

    # time -p ls -R / > /dev/null
    real 1.85
    user 0.53
    sys 1.30
    

    Počet desetinných míst se může lišit dle potřeby (až šest), ovšem vždy musí být vypsáno alespoň jedno.

    nohup

    link

    Příkaz nohup slouží ke spuštění daného programu tak, aby ignoroval signál SIGHUP, který systém posílá, když je ukončen řídící terminál daného procesu.

    Například následující příkaz spustí fatrat tak, aby běžel i po uzavření konzole:

    nohup fatrat
    

    Výstup programu je ukládán do souboru nohup.out v aktuálním pracovním adresáři a pokud tento soubor nelze otevřít pro zápis, tak se použije soubor ~/nohup.out, přičemž pokud ani do něj nelze zapisovat, nohup skončí s chybou a daný program nespustí.

    Často je žádoucí spustit program rovnou na pozadí a ignorovat jeho výpisy, čehož lze dosáhnout takto:

    # std. výstup a std. chybový výstup je přesměrován do /dev/null
    nohup fatrat &> /dev/null &
    

    Pokud takto spouštíte něco na vzdáleném počítači přes SSH, tak se vám může stát, že se nebudete moci odpojit. To řešíme tak, že přesměrujeme i standardní vstup. Nakonec by tedy příkaz vypadal takto:

    nohup fatrat &> /dev/null < /dev/null &
    

    Ještě dodám jeden malý související tip, který patrně není unixový (a přenositelný), nicméně na GNU/Linuxu funguje. Spustíte-li z konzole příkaz, který běží dlouho, a vy se rozhodnete v polovině jeho průběhu, že jste ho vlastně chtěli spustit přes nohup, lze to vyřešit. Když zmáčknete Ctrl+Z, proces se zastaví (dostane signál SIGSTOP). Když poté spustíte bg, proces pokračuje v běhu na pozadí. Nakonec když spustíte disown, tak docílíte podobného efektu, jako kdybyste program spustili přes nohup. Nyní můžete klidně daný shell ukončit a příkaz poběží dál.

           

    Hodnocení: 100 %

            špatné • dobré        

    Nástroje: Tisk bez diskuse

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

    Komentáře

    Vložit další komentář

    4.8.2010 11:37 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)
    zsh time a /usr/bin/time maju iny vystup
    David Watzke avatar 4.8.2010 12:28 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)
    Výchozí výstup můžou mít jiný, s -p by měl být stejný. Pokud není, potom tyto verze neodpovídají standardu. Bash se drží standardu.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    4.8.2010 11:50 Andy | skóre: 18 | NMnMet
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)
    diky za ten disown
    Válka je vůl ... a já taky ;) | Chaotic state of my influence.
    4.8.2010 14:11 xsmejka1
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)
    +1
    5.8.2010 09:51 Jirka
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)

    Neodpovidajici SSH session (prave treba kvuli background procesu) je take mozne ukoncit pomoci nasledujiciho navodu:

    http://www.onlinehowto.net/Tutorials/SSH/SSH-tips-and-tricks-Dead-or-unresponsive-ssh-session/1271

    Klicova je posledni veta:
     "So to kill the dead ssh session you do Enter then Shift + ` and then . (dot)."

    6.8.2010 10:08 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)
    Obecně řečeno Enter a pak dva znaky: ~.
    7.8.2010 14:42 rob
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)

    disown [ options ] [job ...]

    If job is omitted, the most recently started or stopped background job is used. Takze proces nemusite stopovat, ale staci dodat hodnotu job daneho procesu.
    David Watzke avatar 7.8.2010 15:03 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)
    Každej shell má svojí "frontu" úloh, z shellu X nelze ovlivňovat úlohy shellu Y, takže smůla.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    7.8.2010 22:25 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)
    Klíčové je slovo "background"

    most recently (started or stopped) background job

    pro jistotu jsem dodal závorky, abyste to správně pobral. Job musí být na pozadí, nebo ho musíte dostat do pozadí. Pokud je na pozadí, stopovat ho nemusíte. Pokud je na popředí... prosím pro podporu svého tvrzení popište způsob jak ho dostat do pozadí aniž ho stopnete.
    28.2.2011 19:20 xor
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)
    Jak pomocí getopts získat více, než jeden argument? ... když příkladem spuštění je ./skript -prepinac ARGUMENT1 ARGUMENT2

    Předem díky za odpověď. X.O.R.
    David Watzke avatar 28.2.2011 19:22 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)
    Řekl bych, že to nejde. Budete si asi muset naprogramovat vlastní parser, což není tak těžké. V shellu lze použít kombinace cyklu, case, shift a pár podmínek...
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    28.2.2011 19:37 xor
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)
    A pokud bych nepoužil getopts, ale getopt, který není tak striktní, řešení by bylo možné bez "ručního" rozdělování???
    David Watzke avatar 28.2.2011 19:42 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)
    Ruku do ohně za to nedám, neznám manuály getopt(s) zpaměti, ale myslím, že to nepůjde žádným standardním parserem, protože to, čeho se snažíte docílit, je dost specifické chování. Většinou mají programy buď krátké nebo dlouhé přepínače, které buď berou či neberou argument. Podle mě by nejlepším postupem bylo, kdybyste přehodnotil zda je opravdu nutné dělat to takto a ne nějakou běžnější cestou, jako to dělá většina ostatních programů. V opačném případě vám zřejmě nezbyde nic jiného, než vlastní parser.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    28.2.2011 19:49 xor
    Rozbalit Rozbalit vše Re: Unixové nástroje – 16 (getopts, time, nohup)
    Děkuji za odpověď.

    Založit nové vlákno • Nahoru

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