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:55 | Nasazení Linuxu

    CERN dlouhodobě používal vlastní sestavení RHEL, ze kterého přešel na CentOS Stream. Federico Vaga a Nikos Tsipinakis ale nyní v přednášce na MiniDebConf Winterthur 2026 popisují plán probíhajícího přechodu na Debian pro řízení akcelerátorů. Důvodem k opuštění CentOS Stream jsou zachování zpětné kompatibility se starším hardwarem, kterou Red Hat narušuje, když tlačí sestavení balíčků pro novější verze architektury (x86-64), a nedostatečné nástroje pro sestavování vlastních balíčků a repozitářů.

    |🇵🇸 | Komentářů: 3
    dnes 01:44 | Nová verze

    UZDoom (Wikipedie), tj. fork GZDoom, byl vydán ve verzi 5.0.0. Videopředstavení na YouTube. Podrobný přehled novinek v Changelogu.

    Ladislav Hagara | Komentářů: 0
    včera 16:11 | Nová verze

    Příručka Linux From Scratch pro sestavení základního linuxového systému byla aktualizována v pravidelném půlročním termínu. Vydání 13.1 shrnuje přes 40 nových verzí balíčků a několik patchů. Navazující příručka Beyond Linux From Scratch s recepty pro sestavení dalších knihoven a aplikací zatím vydána nebyla, ačkoliv vývojová verze stále dostává aktualizace. Lze je číst online nebo stáhnout v HTML či PDF.

    |🇵🇸 | Komentářů: 0
    včera 12:44 | IT novinky

    Národní bezpečnostní tým CSIRT.CZ koordinovaný sdružením CZ.NIC přichází se službou Strážci internetu, která má sjednotit způsob hlášení doménových jmen zneužívaných k páchání trestné činnosti. Službu mohou uživatelé využívat také prostřednictvím rozšíření do prohlížeče. Nový nástroj podporuje jak hlášení vyžadující autorizaci, tak anonymní reporting, u kterého však nebude možné zapojit takovou míru automatizace jako u

    … více »
    Ladislav Hagara | Komentářů: 18
    včera 12:22 | Komunita

    Firefox pro iOS přichází s integrovaným blokováním reklam. Funkce je ve výchozím nastavení vypnutá a lze ji aktivovat v Settings > Browsing > Ad Blocker.

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

    Společnost Hugging Face ve spolupráci se společností Pollen Robotics představila (𝕏) open-source robota Microduck. Předobjednat jej lze za 340 eur.

    Ladislav Hagara | Komentářů: 2
    včera 10:55 | Nová verze

    Open-source autonomní AI agent OpenClaw (Wikipedie) byl vydán ve verzi 2026.8.1 aneb 2.0. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    1.9. 18:55 | Nová verze

    Byla vydána první veřejná preview verze PrusaSliceru 3.0. Přesně 15 let po zveřejnění první verze Slic3ru, které připadlo na 1. září 2011. Jedná se o dosud největší upgrade PrusaSliceru: "Řídili jsme se tím, co skutečně potřebujete, a tak jsme například zcela zahodili stávající uživatelské rozhraní a vytvořili ho znovu od nuly. Přinášíme také nový systém projektů, kompletně přepracované profily navržené pro moderní tiskárny s větším

    … více »
    Ladislav Hagara | Komentářů: 1
    1.9. 15:55 | Nová verze

    Byl vydán Mozilla Firefox 155.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Vypíchnout lze Smart Window, zatím ale dostupné pouze pro uživatele v USA, Kanadě a Francii. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 155 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    1.9. 12:33 | IT novinky

    Tima Cooka na pozici generálního ředitele společnosti Apple dnešním dnem nahradil John Ternus, který byl dosud odpovědný za hardware. Tim Cook vedl Apple od roku 2011, kdy funkci převzal od později zesnulého spoluzakladatele společnosti Stevea Jobse. Za 15 let v čele Applu více než zdvojnásobil tržní hodnotu firmy.

    Ladislav Hagara | Komentářů: 3
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (3%)
     (20%)
     (29%)
     (7%)
     (5%)
     (2%)
     (15%)
     (21%)
    Celkem 2553 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: Output command to variable

    10.11.2020 17:05 Lukáš
    Output command to variable
    Přečteno: 636×
    Ahoj, nemohu přijít na lehký programátorský oříšek :-)

    Prosím Vás, jak docílím uložení výstupu příkazu do proměnné v bashi? Standartně je syntaxe:
    c=$(pwr)
    echo "Output ${c}"
    
    To tak FUNGUJE!

    --------------------------------------------------------------------------
    Ale potřebuji výstup z příkazu "nc"
    c=$(nc -v -z 192.168.1.222 80)
    echo "Output ${c}"
    
    Toto NEFUNGUJE

    Ve výstupu mám:
    Connection to 192.168.1.222 80 port [tcp/http] succeeded!
    Output
    
    Proměnná "c" je prázdná. Jak prosím uložím příkaz "nc" do proměnné?

    Všem moc děkuji za pomoc Lukáš

    Odpovědi

    10.11.2020 17:32 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
    Rozbalit Rozbalit vše Re: Output command to variable
    Pokud chcete stáhnout obsah dostupný přes http, je nc zbytečně nízkoúrovňové. Použijte třeba curl:

    O=$(curl http://192.168.0.1/index.html)
    -- OldFrog
    10.11.2020 18:43 pavele
    Rozbalit Rozbalit vše Re: Output command to variable
    c=$(nc -v -z 127.0.0.1 80 1 2>&1)
    10.11.2020 19:54 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
    Rozbalit Rozbalit vše Re: Output command to variable
    c=$(nc -v -z 127.0.0.1 80 1 2>&1)
    Pořád mi přijde curl pro daný úkol snadnější, porovnej curl:
    # curl www.root.cz
    
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>301 Moved Permanently</title>
    </head><body>
    <h1>Moved Permanently</h1>
    <p>The document has moved <a href="https://www.root.cz/">here</a>.</p>
    <hr>
    <address>Apache/2.4.25 (Debian) OpenSSL/1.0.2l Server at www.root.cz Port 80</address>
    </body></html>
    
    čili:
    # curl https://www.root.cz
    
    <!DOCTYPE html>
    <!--
    Zdá se, že se zajímáš o náš zdrojový kód...
    Hledáme posilu do našeho týmu!
    @erik.dvorak@iinfo.cz
    --><html id="css" class="js-inactive design-html" lang="cs">
    (...)
    
    vs nc:
    # nc -v -z www.root.cz 80
    Connection to www.root.cz 80 port [tcp/http] succeeded!
    
    -- OldFrog
    11.11.2020 08:29 jiwopene | skóre: 31 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: Output command to variable
    On chce otestovat to, jestli je port otevřený (nc -z), ne poslat HTTP požadavek.
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    11.11.2020 14:36 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
    Rozbalit Rozbalit vše Re: Output command to variable
    Oops, máte pravdu.

    Ale to bych pak testoval nějak takto:

    nc -v -z 127.0.0.1 81 && echo OTEVRENY || echo ZAVRENY;
    -- OldFrog
    12.11.2020 09:18 jiwopene | skóre: 31 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: Output command to variable
    A bez toho -v.
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    10.11.2020 17:36 jiwopene | skóre: 31 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: Output command to variable
    Zápis nazev_promenne=="$(příkaz)" uloží do proměnné standardní výstup (stdout) příkazu. Každý program spuštěný ze shellu má ve výchozím stavu tyto výstupy:
    • stdin, fd 0, standardní vstup – toto je text z klávesnice nebo vstup poslaný rourou
    • stdout, fd 1, standardní výstup – běžně se posílá do terminálu („na obrazovku“), ale můžete ho přesměrovat do jiného příkazu nebo souboru
    • stderr, fd 2, (standardní) chybový výstup – běžně se posílá do terminálu („na obrazovku“), ale můžete ho přesměrovat do jiného příkazu nebo souboru – podobný stdout1
    V shellu jste se pravděpodobně setkal s přesměrováním. Syntaxe je následující:
    # standardní výstup jde do souboru
    příkaz >soubor
    
    # standardní vstup jde ze souboru
    příkaz <soubor
    
    # standardní výstup příkaz1 jde na standardní vstup příkaz2
    příkaz1 | příkaz2
    
    Můžete si všimnout toho, že všechny případy se týkají jen standardního vstupu a výstupu. Chybový výstup jde ve výchozím nastavení do terminálu. Pokud ho chcete přesměrovat do souboru, vypadá to takto:
    # chybový výstup jde do souboru
    příkaz 2>soubor
    
    Ta dvojka znamená file descriptor číslo 2, tedy stderr. Podobně můžete nastavit i jiné FD než stdout a stderr, ale to v praxi většinou nepoužijete.

    Můžete také přesměrovat stderr do stdout tím, že do cílového souboru napíšete &2 (FD číslo 2)2:
    # chybový výstup (fd 2) se sloučí se standardním (fd 1), takže je veškerý výstup na standardním
    příkaz 2>&1
    
    To můžete pak vzít a přesměrovat do souboru nebo jiného příkazu:
    # chybový výstup (fd 2) se sloučí se standardním (fd 1), standardní se pak směruje do souboru
    příkaz 2>&1 >soubor
    
    # chybový výstup příkazu 1 (fd 2) se sloučí se standardním příkazu 1 (fd 1), standardní se pak směruje do příkazu 2 (příkaz 2 už má ale opět oba výstupy)
    příkaz1 2>&1 | příkaz2
    

    Takže co tam má být?

    nc tuto hlášku vypisuje na standardní chybový výstup, takže je chceme sloučit a to potom uložit do proměnné:
    c="$(nc -vz 192.168.1.222 80 2>&1)"

    Rada na závěr:

    Pokud máte v shellu proměnnou, pište ji do uvozovek. Srovnejte tyto dva zápisy:
    a=$(echo lorem ipsum)
    b="$(echo lorem ipsum)"
    Po vyhodnocení $(…) bash vidí toto:
    a=lorem ipsum
    b="lorem ipsum"
    První řádek znamená „spusť příkaz „ipsum“ s proměnnou prostředí „a“ nastavenou na „lorem“.

    Druhý řádek znamená „ulož do proměnné „b“ text „lorem ipsum“.

    Toto je častý zdroj chyb v bashových programech.

    [1] Trochu odlišně se bufferuje a některé emulátory terminálu ho mohou jinak zpracovávat – např. zobrazit jinou barvou. [2] S tímhle je možné dělat i poměrně nečitelné věci. Příkaz exec je možné použít ke směrování file deskriptorů samotného shellu.
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    10.11.2020 17:41 jiwopene | skóre: 31 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: Output command to variable
    Ještě jedna věc:

    Příkaz má i svůj exit status (česky asi návratový kód), tedy číselný popis stavu po ukončení. Většina příkazů funguje tak, že ho nastaví na nenulovou hodnotu při chybě, jinak je 0. To umožňuje tvořit podmínky:
    if příkaz1
    then
            toto se provede pokud příkaz1 uspěl
    fi
    
    if příkaz2
    then
            toto se provede pokud příkaz2 uspěl
    else
            toto se provede pokud příkaz2 neuspěl
    fi
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    11.11.2020 09:00 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Output command to variable
    Pokud máte v shellu proměnnou, pište ji do uvozovek. Srovnejte tyto dva zápisy:
    a=$(echo lorem ipsum)
    b="$(echo lorem ipsum)"
    Po vyhodnocení $(…) bash vidí toto:
    a=lorem ipsum
    b="lorem ipsum"
    První řádek znamená „spusť příkaz „ipsum“ s proměnnou prostředí „a“ nastavenou na „lorem“.

    Druhý řádek znamená „ulož do proměnné „b“ text „lorem ipsum“.

    Toto je častý zdroj chyb v bashových programech.

    Obecně máte pravdu, ale zrovna u přiřazení je to trochu složitější, takže ten váš příklad nefunguje tak, jak tvrdíte:

    mike@lion:~> var=$(echo lorem ipsum)
    mike@lion:~> echo ">$var<"
    >lorem ipsum<
    
    10.11.2020 17:37 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Output command to variable

    To hlášení píše nc na chybový výstup, nikoliv na standardní výstup. Proto se objevuje na terminálu a ne v proměnné.

    c="$(netcat -v -z 2a02:xxxx:yyyy:2:defb:48ff:fe28:4f42 80 2>&1)"
    

    Takhle^^^ mi to normálně funguje:

    $ echo "$c"
    Connection to 2a02:xxxx:yyyy:2:defb:48ff:fe28:4f42 80 port [tcp/http] succeeded!
    

    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.