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 18:55 | IT novinky

    Společnost Valve publikovala přehled To nej roku 2025 ve službě Steam aneb ohlédnutí za nejprodávanějšími, nejhranějšími a dalšími nej hrami roku 2025.

    Ladislav Hagara | Komentářů: 0
    dnes 16:11 | Komunita

    Byly publikovány výsledky průzkumu mezi uživateli Blenderu uskutečněného v říjnu a listopadu 2025. Zúčastnilo se více než 5000 uživatelů.

    Ladislav Hagara | Komentářů: 0
    dnes 03:33 | Bezpečnostní upozornění

    V dokumentově orientované databázi MongoDB byla nalezena a v upstreamu již opravena kritická bezpečností chyba CVE-2025-14847 aneb MongoBleed.

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

    Při úklidu na Utažské univerzitě se ve skladovacích prostorách náhodou podařilo nalézt magnetickou pásku s kopií Unixu V4. Páska byla zaslána do počítačového muzea, kde se z pásky úspěšně podařilo extrahovat data a Unix spustit. Je to patrně jediný známý dochovaný exemplář tohoto 52 let starého Unixu, prvního vůbec programovaného v jazyce C.

    🇨🇽 | Komentářů: 1
    včera 15:55 | Komunita

    FFmpeg nechal kvůli porušení autorských práv odstranit z GitHubu jeden z repozitářů patřících čínské technologické firmě Rockchip. Důvodem bylo porušení LGPL ze strany Rockchipu. Rockchip byl FFmpegem na porušování LGPL upozorněn již téměř před dvěma roky.

    🇨🇽 | Komentářů: 7
    včera 15:44 | Zajímavý software

    K dispozici je nový CLI nástroj witr sloužící k analýze běžících procesů. Název je zkratkou slov why-is-this-running, 'proč tohle běží'. Klade si za cíl v 'jediném, lidsky čitelném, výstupu vysvětlit odkud daný spuštěný proces pochází, jak byl spuštěn a jaký řetězec systémů je zodpovědný za to, že tento proces právě teď běží'. Witr je napsán v jazyce Go.

    🇨🇽 | Komentářů: 1
    včera 15:33 | Zajímavý software

    Yazi je správce souborů běžící v terminálu. Napsán je v programovacím jazyce Rust. Podporuje asynchronní I/O operace. Vydán byl v nové verzi 25.12.29. Instalovat jej lze také ze Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    26.12. 18:44 | Komunita

    Od soboty do úterý probíhá v Hamburku konference 39C3 (Chaos Communication Congress) věnovaná také počítačové bezpečnosti nebo hardwaru. Program (jiná verze) slibuje řadu zajímavých přednášek. Streamy a záznamy budou k dispozici na media.ccc.de.

    Ladislav Hagara | Komentářů: 0
    26.12. 13:22 | Zajímavý software

    Byl představen nový Xserver Phoenix, kompletně od nuly vyvíjený v programovacím jazyce Zig. Projekt Phoenix si klade za cíl být moderní alternativou k X.Org serveru.

    🇨🇽 | Komentářů: 7
    26.12. 13:11 | Nová verze

    XLibre Xserver byl 21. prosince vydán ve verzi 25.1.0, 'winter solstice release'. Od založení tohoto forku X.Org serveru se jedná o vůbec první novou minor verzi (inkrementovalo se to druhé číslo v číselném kódu verze).

    🇨🇽 | Komentářů: 0
    Kdo vám letos nadělí dárek?
     (34%)
     (1%)
     (24%)
     (1%)
     (2%)
     (1%)
     (10%)
     (11%)
     (17%)
    Celkem 191 hlasů
     Komentářů: 21, poslední dnes 18:58
    Rozcestník

    Dotaz: Bash: ako vynutit pathname expansion?

    16.11.2008 00:57 Semo | skóre: 45 | blog: Semo
    Bash: ako vynutit pathname expansion?
    Přečteno: 401×
    V bash skripte prechadzam obrovsku a zlozitu adresarovu strukturu a kontrolujem, ci obsahuje vsetko co ma. Kazdy nazov adresara ma nejaky numericky unikatny generovany prefix a dalej textovy nazov. Napr: "002456.c". Potrebujem overit, ze v nejakom adresari sa nachadza aspon jeden adresar *.c. Ako to urobit bez spustenia externeho procesu? Potreboval by som si vynutit pathname expanziu retazca.

    Majme napriklad stav:
    $ ls
    111111.a
    222222.b
    333333.b
    
    a skript:
    dir=*.c
    if [[ -z $dir ]]; then
        echo "c neexistuje"
    fi
    
    No, lenze do premennej dir sa skutocne ulozi retazec "*.c" a vnutri [[ ]] sa uz pathname expanzia nerobi. Test na neprazdnost tejto premennej vzdy zlyha, takze takto napisany skript si nevsimne neexistenciu c-cka. Nepomaha ani zapnute shopt -s nullglob

    Jedine riesenie co som nasiel je expadndovat cez eval:
    dir="`eval echo *.c`"
    lenze spustenie niekolko desiatoktisic procesov zozerie hrozneho casu a tomu by som sa chcel vyhnut. Riesenie by si malo poradit aj s tym, ze nazov adresara moze obsahovat medzeru, prip. ze adresarov *.c moze byt viac ako jeden.

    (Napadlo ma spustit forcyklus (kde bash expanduje nazvy suborov) typu 'for i in *.c; do', vo vnutri si nastavit flag, ze cyklus aspon raz prebehol=adrear c existuje, a skoncit natvrdo cyklus. Ale radsej by som nejake elegantnejsie riesenie.)
    If you hold a Unix shell up to your ear, you can you hear the C.

    Odpovědi

    Luboš Doležel (Doli) avatar 16.11.2008 01:17 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Bash: ako vynutit pathname expansion?
    dir=*.c mi funguje, pokud takový soubor existuje. Nevím k čemu pak -z, existenci lze ověřovat s -e.
    16.11.2008 02:21 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: Bash: ako vynutit pathname expansion?
    No, mne dir=*.c funguje, ale iba stylom, ze ak dam echo $dir, tak to vypise expandovane subory. Lenze pomocou echo "$dir" sa da overit, ze ta expanzia nastala az pri volani toho echo a nie v momente priradovania. A kedze v [[ ]] sa pathname expanzia nerobi, tak tam to zlyha.

    No, ale vymyslel som dve riesenia.

    1.)
    set -- *.c
    dir="$1"
    [[ -z "$dir" ]] &&
    ...
    2.)
    dir=( *.c )
    [[ -z "${dir[1]}" ]] &&
    ...
    
    Obe riesenia funguju aj pre viac suborov, aj ak obsahuju medzery. Je ale divne, ze pri priradovani premennych sa pathname exp. nerobi, ale pri priradovani poli uz hej.
    If you hold a Unix shell up to your ear, you can you hear the C.
    16.11.2008 02:31 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: Bash: ako vynutit pathname expansion?
    Oprava: 2.)
    ...
    [[ -z "${dir[0]}" ]] &&
    ...
    If you hold a Unix shell up to your ear, you can you hear the C.
    Luboš Doležel (Doli) avatar 16.11.2008 13:02 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Bash: ako vynutit pathname expansion?
    Fakt nechápu, proč se snažíte ověřit existenci souborů přes -z.
    18.11.2008 04:05 luky
    Rozbalit Rozbalit vše Re: Bash: ako vynutit pathname expansion?
    Protoze overuje vysledek te expanze.
    16.11.2008 13:43 mikky | skóre: 25 | blog: Ghlog | M. L. - Praha
    Rozbalit Rozbalit vše Re: Bash: ako vynutit pathname expansion?
    ls *.c > /dev/null 2>&1 && echo "existuje"

    ale pouze v případě, že si si jistý, že se tam neobjeví něco jiného, než adresáře...

    btw, to testování pomocí "-z" je fakt nesmysl

    -m.
    Je vám méně než 30 ? (jsme vrstevnící => budeme si tykat) : (jsem pro vás bažant => můžete mi tykat);
    16.11.2008 16:29 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: Bash: ako vynutit pathname expansion?
    1.) ls je samostatny program = spustanie noveho procesu, tomu sa chcem vyhnut

    2.) hladany shellpattern (*.c) tam moze byt 0 az viackrat. To znamena, ze testy pomocou -a/-f/-d atd. nebudu obecne fungovat

    3.) nechcem iba otestovat existenciu, ale aj zistit presny (expandovany) nazov

    4.) Mas lepsie riesnie? Ak ano sem s nim. Ja na svojom nijak netrvam, ale zatial tu lepsie nepadlo. Navyse obecny problem: ako vynutit pathname expansion je stary a (podla mna) doteraz malo riesitelny problem. Staci si tu prehladat diskusie na "bash expansion", "bash expanze" a pod. a vybehne 25 diskusii, bez jasneho zaveru ako to riesit inac ako externym procesom. Sposob expandovat to cez pole by (IMO) vyriesil 1/2 tych diskusii.
    If you hold a Unix shell up to your ear, you can you hear the C.
    16.11.2008 16:42 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: Bash: ako vynutit pathname expansion?
    btw, to testování pomocí "-z" je fakt nesmysl

    samozrejme to chce mat zapnute
    shopt -s nullglob
    If you hold a Unix shell up to your ear, you can you hear the C.
    16.11.2008 21:09 kuka
    Rozbalit Rozbalit vše Re: Bash: ako vynutit pathname expansion?
    Moc nechapu proc eval echo, nestaci pro tento ucel jen echo? U mne je jak eval, tak i echo shell builtin a se spoustenim zbytecnych procesu tak neni zadny problem. Samozrejme pokud to ma snad byt prenositelne, tak na to nejde zcela spolehat. Zkousel jsi to pustit? Opravdu se ti spoustely desetitice procesu?
    16.11.2008 21:44 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: Bash: ako vynutit pathname expansion?
    eval je builtin. Ale ako chces z neho ziskat tu hodnotu naspat? Pravdepodobne cez ``, prip $(), ktore spustaju novy proces (bash, v ktorom sa to eval vykona ako builtin).
    $ time for ((i=0; i<10000; i++)); do a="`eval echo *.c`"; done; echo "$a"
    
    real    0m7.878s
    user    0m2.253s
    sys     0m5.160s
    222.c
    
    $ time for ((i=0; i<10000; i++)); do a=( *.c ); done; echo "${a[0]}"
    
    real    0m0.495s
    user    0m0.350s
    sys     0m0.103s
    222.c
    
    16x rychlejsie. Podla sys zlozky v 1. pripade vidno, ze vacsinu stravil v rezime jadra, co v tomto priklade moze byt iba vytvaranie a rusenie procesov.
    If you hold a Unix shell up to your ear, you can you hear the C.

    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.