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 | IT novinky

    Nejvyšší správní soud (NSS) podruhé zrušil pokutu za únik zákaznických údajů z e-shopu Mall.cz. Incidentem se musí znovu zabývat Úřad pro ochranu osobních údajů (ÚOOÚ). Samotný únik ještě neznamená, že správce dat porušil svou povinnost zajistit jejich bezpečnost, plyne z rozsudku dočasně zpřístupněného na úřední desce. Úřad musí vždy posoudit, zda byla přijatá opatření přiměřená povaze rizik, stavu techniky a nákladům.

    Ladislav Hagara | Komentářů: 0
    včera 18:44 | Komunita

    Organizace Free Software Foundation Europe (FSFE) zrušila svůj účet na 𝕏 (Twitter) s odůvodněním: "To, co mělo být původně místem pro dialog a výměnu informací, se proměnilo v centralizovanou arénu nepřátelství, dezinformací a ziskem motivovaného řízení, což je daleko od ideálů svobody, za nimiž stojíme". FSFE je aktivní na Mastodonu.

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

    Paramount nabízí za celý Warner Bros. Discovery 30 USD na akcii, tj. celkově o 18 miliard USD více než nabízí Netflix. V hotovosti.

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

    Nájemný botnet Aisuru prolomil další "rekord". DDoS útok na Cloudflare dosáhl 29,7 Tbps. Aisuru je tvořený až čtyřmi miliony kompromitovaných zařízení.

    Ladislav Hagara | Komentářů: 4
    včera 12:11 | Nová verze

    Iced, tj. multiplatformní GUI knihovna pro Rust, byla vydána ve verzi 0.14.0.

    Ladislav Hagara | Komentářů: 2
    včera 05:22 | Komunita

    FEX, tj. open source emulátor umožňující spouštět aplikace pro x86 a x86_64 na architektuře ARM64, byl vydán ve verzi 2512. Před pár dny FEX oslavil sedmé narozeniny. Hlavní vývojář FEXu Ryan Houdek v oznámení poděkoval společnosti Valve za podporu. Pierre-Loup Griffais z Valve, jeden z architektů stojících za SteamOS a Steam Deckem, v rozhovoru pro The Verge potvrdil, že FEX je od svého vzniku sponzorován společností Valve.

    Ladislav Hagara | Komentářů: 0
    včera 03:22 | Nová verze

    Byla vydána nová verze 2.24 svobodného video editoru Flowblade (GitHub, Wikipedie). Přehled novinek v poznámkách k vydání. Videoukázky funkcí Flowblade na Vimeu. Instalovat lze také z Flathubu.

    Ladislav Hagara | Komentářů: 0
    7.12. 15:11 | IT novinky

    Společnost Proton AG stojící za Proton Mailem a dalšími službami přidala do svého portfolia online tabulky Proton Sheets v Proton Drive.

    Ladislav Hagara | Komentářů: 6
    6.12. 15:55 | Komunita

    O víkendu (15:00 až 23:00) probíha EmacsConf 2025, tj. online konference vývojářů a uživatelů editoru GNU Emacs. Sledovat ji lze na stránkách konference. Záznamy budou k dispozici přímo z programu.

    Ladislav Hagara | Komentářů: 0
    6.12. 15:44 | Komunita

    Provozovatel internetové encyklopedie Wikipedia jedná s velkými technologickými firmami o uzavření dohod podobných té, kterou má s Googlem. Snaží se tak zpeněžit rostoucí závislost firem zabývajících se umělou inteligencí (AI) na svém obsahu. Firmy využívají volně dostupná data z Wikipedie k trénování jazykových modelů, což zvyšuje náklady, které musí nezisková organizace provozující Wikipedii sama nést. Automatické programy

    … více »
    Ladislav Hagara | Komentářů: 31
    Jaké řešení používáte k vývoji / práci?
     (34%)
     (48%)
     (19%)
     (17%)
     (22%)
     (15%)
     (24%)
     (16%)
     (18%)
    Celkem 443 hlasů
     Komentářů: 18, poslední 2.12. 18:34
    Rozcestník

    Dotaz: Output command to variable

    10.11.2020 17:05 Lukáš
    Output command to variable
    Přečteno: 480×
    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.