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 00:11 | Nová verze

    Byla vydána (𝕏) červnová aktualizace aneb nová verze 1.102 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.102 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    včera 21:00 | Bezpečnostní upozornění

    Byla vydána nová verze 2.4.64 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 8 bezpečnostních chyb.

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

    Společnost xAI na síti 𝕏 představila Grok 4, tj. novou verzi svého AI LLM modelu Grok.

    Ladislav Hagara | Komentářů: 8
    včera 12:55 | Bezpečnostní upozornění

    Ministerstvo vnitra odhalilo závažný kyberincident v IT systému resortu. Systém, do kterého se dostal útočník bez oprávnění, byl odpojen a nedošlo k odcizení dat [𝕏].

    Ladislav Hagara | Komentářů: 12
    včera 11:55 | Humor

    Před rokem byla streamovací služba HBO Max přejmenována na Max. Dle managementu slovo HBO v názvu nebylo důležité. Včera byl Max přejmenován zpět na HBO Max. Kolik milionů dolarů to stálo? 😂

    Ladislav Hagara | Komentářů: 5
    včera 02:11 | Nová verze

    Byla vydána nová major verze 8.0.0 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata (Wikipedie). Přehled novinek v oficiálním oznámení a v aktualizované dokumentaci.

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

    Mastodon (Wikipedie) - sociální síť, která není na prodej - byl vydán ve verzi 4.4. Přehled novinek s náhledy a videi v oznámení na blogu.

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

    Instituce státní správy nebudou smět využívat produkty, aplikace, řešení, webové stránky a webové služby poskytované čínskou společností DeepSeek. Na doporučení Národního úřadu pro kybernetickou a informační bezpečnost rozhodla o jejich zákazu vláda Petra Fialy na jednání ve středu 9. července 2025.

    Ladislav Hagara | Komentářů: 4
    9.7. 06:00 | Zajímavý projekt

    Jack Dorsey představil (𝕏, Nostr) svůj nový projekt bitchat. Jedná se o bezpečnou decentralizovanou peer-to-peer aplikaci pro zasílání zpráv bez potřeby internetu, serverů a telefonních čísel. Využívá se Bluetooth Mesh Network. Detaily v technické dokumentaci. Zdrojové kódy jsou k dispozici pod licencí Unlicense.

    Ladislav Hagara | Komentářů: 6
    9.7. 04:22 | Nová verze

    Hudební přehrávač Amarok byl vydán v nové verzi 3.3 "Far Above the Clouds". Nově je postaven na Qt6/KF6 a využívá GStreamer místo Phononu.

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

    Dotaz: azcopy prerusi 'while' cyklus

    31.1.2020 16:28 GeorgeWH | skóre: 42
    azcopy prerusi 'while' cyklus
    Přečteno: 398×
    Zdravim,

    mam jednoduchy shell skript, ktory vo while cykle prechadza obsah suboru po riadkoch (kazdy riadok predstavuje subor ulozeny na ms azure storage) a zistuje, ci dany subor existuje aj lokalne na disku. Ak subor neexistuje, tak ho vymaze aj z azure storage (taka primitivna obdoba rsync).

    Problem je, ze cyklus sa stale ukonci, ked sa vymaze prvy subor z azure storage (exit status prikazu je 0). Ak samotny prikaz nevykonam, resp. ho nahradim vypisanim samotneho prikazu (ktory by sa spustil) pomocou echo, tak to funguje.

    Cast skriptu, ktora nefunguje:
    # delete remote files (if enabled)
    if [ "x$delete_remote" = "x1" ]; then
    
      while read line; do
    
        file="$(echo $line | awk -F';' '{ print $2 }')"
    
        if [ ! -f "$file" ]; then
          azcopy remove "$url/$file?$sas" >/dev/null            <=== toto ukonci cyklus pri prvej zhode
          echo "azcopy remove \"$url/$file?$sas\" >/dev/null"   <=== ak to nahradim tymto, tak je to ok
          test $? -ne 0 && error=1
        fi
      done < $remote_files_list
    fi
    
    Obsah/format suboru $remote_files_list (prve je nazov, druhe je velkost):
    ;aaa/a1;0;
    ;aaa/a2;0;
    ;aaa/a3;0;
    ;bbb/b1;0;
    ;bbb/b2;0;
    ;bbb/b3;0;
    
    Lokalne subory:
    aaa/a1
    aaa/a2
    aaa/a3
    
    takze by v azure malo postupne po jednotlivych suboroch vymazat cely adresar bbb.

    Ked spustim shell v debug mode:
    + [ x1 = x1 ]
    + read line
    + echo ;aaa/a1;0;
    + awk -F; { print $2 }
    + file=aaa/a1
    + [ ! -f aaa/a1 ]
    + read line
    + echo ;aaa/a2;0;
    + awk -F; { print $2 }
    + file=aaa/a2
    + [ ! -f aaa/a2 ]
    + read line
    + echo ;aaa/a3;0;
    + awk -F; { print $2 }
    + file=aaa/a3
    + [ ! -f aaa/a3 ]
    + read line
    + echo ;bbb/b1;0;
    + awk -F; { print $2 }
    + file=bbb/b1
    + [ ! -f bbb/b1 ]
    + azcopy remove https://azure.storage.url/path/to/bbb/b1
    + test 0 -ne 0
    + read line
    
    A cyklus sa ukonci (skript potom pokracuje dalej).

    Netusite, cim by to mohlo byt?

    Vdaka.

    Řešení dotazu:


    Odpovědi

    31.1.2020 17:00 NN
    Rozbalit Rozbalit vše Re: azcopy prerusi 'while' cyklus
    Aby skript azcopy neovlivnil aktualni skript mohlo by stacit obalit prikaz do subshellu:
    $(azcopy remove "$url/$file?$sas" >/dev/null)
    test $? -ne 0 && error=1
    
    Tipuju ze to zhavaruje a vezme sebou celou smycku.
    31.1.2020 17:19 GeorgeWH | skóre: 42
    Rozbalit Rozbalit vše Re: azcopy prerusi 'while' cyklus
    Rovnaky vysledok. Skusal som exec azcopy remove ..., /bin/sh -c "/usr/bin/azcopy remove ...", eval $(echo "azcopy remove ..."), nic, stale sa cyklus ukonci po prvom odstraneni suboru, a azcopy skonci bez chyby (je to vidno aj v tom debugu).

    Co ma napada je, ze azcopy nejakym sposobom "vymaze" data predane while cyklu. Je to mozne?

    Skusim este stace.
    31.1.2020 18:07 Peter Golis | skóre: 65 | blog: Bežné záležitosti | Bratislava
    Rozbalit Rozbalit vše Re: azcopy prerusi 'while' cyklus
    Odporučil by som nahlásiť tento bug na podporu MS Azure, tam patrí azcopy a jeho panické obhospodarovanie výnimiek.
    Řešení 1× (Michal Kubeček)
    Jendа avatar 31.1.2020 20:49 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: azcopy prerusi 'while' cyklus
    azcopy ... < /dev/null
    31.1.2020 20:27 debian+
    Rozbalit Rozbalit vše Re: azcopy prerusi 'while' cyklus
    Nestaci iba:?
    (azcopy remove "$url/$file?$sas" >/dev/null)
    Řešení 1× (GeorgeWH (tazatel))
    31.1.2020 19:57 GeorgeWH | skóre: 42
    Rozbalit Rozbalit vše Re: azcopy prerusi 'while' cyklus
    Pouzil som for miesto while a uz to funguje.
    31.1.2020 20:21 NN
    Rozbalit Rozbalit vše Re: azcopy prerusi 'while' cyklus
    WTF?
    31.1.2020 20:37 GeorgeWH | skóre: 42
    Rozbalit Rozbalit vše Re: azcopy prerusi 'while' cyklus
    Miesto
    while read line; do
      ...
    done < $remote_files_list
    som pouzil
    for line in $(cat $remote_files_list); do
      ...
    done
    a toto funguje.
    Jendа avatar 31.1.2020 20:48 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: azcopy prerusi 'while' cyklus
    No sežere to zbytek vstupu z toho přesměrování a tím to skončí. Si zkus
    cat /proc/cpuinfo | while read l; do echo $l; cat - > /dev/null; done
    Tohle je obecně věc co nevím jak by se v Bashi měla řešit -- for cyklus nejde dělat když má člověk v těch věcech mezery (a současně chce původní IFS), u while je příjemné, že čte po řádcích. Ale zase to má tenhle problém.
    3.2.2020 14:57 kolega
    Rozbalit Rozbalit vše Re: azcopy prerusi 'while' cyklus
    jo tohle je pak otravny resit pres \0 a xargs ...
    4.2.2020 10:02 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: azcopy prerusi 'while' cyklus
    Tohle je obecně věc co nevím jak by se v Bashi měla řešit

    A o minutu později jsi sám řešení navrhl. :-)

    Mimochodem, konstrukce

      cmd | while read v; do ... ; done
    

    má ještě jeden háček: while cyklus se při ní provádí v subshellu, takže proměnné nastavené v těle cyklu se nedostanou "ven" (nelze takto předávat hodnoty zbytku skriptu). Naštěstí to bash umožňuje obejít pomocí

      while read v; do ... ; done < <( cmd )
    

    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.