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 19:55 | Nová verze

    Byla vydána (𝕏) nová verze 26.7 open source firewallové a routovací platformy OPNsense (Wikipedie). Jedná se o fork pfSense postavený na FreeBSD. Kódový název OPNsense 26.7 je Xenial Xenops. Přehled novinek v příspěvku na fóru.

    Ladislav Hagara | Komentářů: 0
    dnes 14:44 | IT novinky

    Na Seznam nepovolených internetových her (Wikipedie) se k 13. 7. 2026 dostala predikční platforma Polymarket.

    Ladislav Hagara | Komentářů: 2
    dnes 14:22 | Zajímavý článek

    Nová čísla časopisů od nakladatelství Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 167 (pdf) a Hello World 30 (pdf).

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

    Byla vydána nová verze 3.22.0 grafického vývojového prostředí a platformy Gambas (Wikipedie) založené na interpretru programovacího jazyka Basic s rozšířením o objektově orientované programování. Přehled novinek v poznámkách k vydání. Zdrojové kódy jsou k dispozici na GitLabu.

    Ladislav Hagara | Komentářů: 0
    včera 20:22 | Komunita

    FreeBSD odstranilo poslední GPL kód ze základního systému. Konkrétně dpv, libdpv, libfigpar a dialog. Instalátor před čtyřmi lety přešel z dialogu na bsddialog.

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

    Sociální síti 𝕏 (dříve Twitter) má dnes 20 let. Pro veřejnost byla zpřístupněna 15. července 2006.

    Ladislav Hagara | Komentářů: 2
    včera 14:22 | Zajímavý software

    Insula Faktury je open source generátor faktur, který běží přímo ve webovém prohlížeči. Žádná registrace, žádné sledování, žádné omezení. Zdrojové kódy jsou k dispozici na Codebergu.

    Ladislav Hagara | Komentářů: 17
    včera 13:22 | Komunita

    První Mobile Linux Hackday v Plzni, tj. komunitní setkání věnované Linuxu na mobilních zařízeních, proběhne 24. července od 10:00. Akce je otevřená všem zájemcům – od zvědavců po zkušené vývojáře. Dopoledne proběhnou přednášky Davida Heidelberga a Petra Hodiny o aktuálním stavu mobilního Linuxu: proč vůbec chtít tučňáka v kapse, jaké telefony jsou dnes dobře podporované a co taková podpora obnáší. Po obědě se zaměříme na konkrétní

    … více »
    Ladislav Hagara | Komentářů: 0
    14.7. 19:33 | Nová verze

    3D software Blender byl vydán ve verzi 5.2 s prodlouženou podporou. Videopředstavení na YouTube.

    Ladislav Hagara | Komentářů: 0
    14.7. 16:55 | Zajímavý software

    SketchForge 3D (GitHub, reddit) je open source 3D editor / CAD běžící ve webovém prohlížeči bez nutnosti účtu nebo cloudového úložiště. Inspirovaný byl Tinkercadem. Doporučena je lokální instalace.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (7%)
     (2%)
     (17%)
     (31%)
     (4%)
     (6%)
     (2%)
     (15%)
     (25%)
    Celkem 2144 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: azcopy prerusi 'while' cyklus

    31.1.2020 16:28 GeorgeWH | skóre: 42
    azcopy prerusi 'while' cyklus
    Přečteno: 507×
    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: 71 | 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.