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í
×

včera 20:00 | Nová verze

Byla vydána (cgit) verze 0.99 svobodného nelineárního video editoru Pitivi. Jedná se o release candidate verze 1.0. Přehled úkolů, které je nutno ještě dodělat, na Phabricatoru. Pitivi je k dispozici také ve formátu Flatpak.

Ladislav Hagara | Komentářů: 0
včera 17:11 | Komunita

Microsoft s Canonicalem představili linuxové jádro Ubuntu optimalizováno pro cloudové služby Microsoft Azure (linux-azure). Jako výchozí je toto menší a výkonnější jádro použito již v Ubuntu Cloud Images for Ubuntu 16.04 LTS. Canonical zatím nenabízí patchování tohoto jádra za běhu systému (Canonical Livepatch Service).

Ladislav Hagara | Komentářů: 1
včera 14:55 | Komunita

Facebook oznámil, že přelicencuje open source projekty React, Jest, Flow a Immutable.js ze své vlastní kontroverzní licence BSD+Patents na licenci MIT. Stane se tak tento týden s vydáním Reactu 16. Jedním z důvodů přelicencování bylo oznámení nadace Apache, že software pod Facebook BSD+Patents licencí nesmí být součástí produktů pod touto nadací [Hacker News].

Ladislav Hagara | Komentářů: 0
23.9. 21:44 | Nová verze

Po půl roce od vydání verze 9.0 byla vydána verze 10.0 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 0
22.9. 18:11 | Nová verze

Společnost Oracle oficiálně oznámila vydání Java SE 9 (JDK 9), Java Platform Enterprise Edition 8 (Java EE 8) a Java EE 8 Software Development Kit (SDK). Java SE 9 přináší více než 150 nových vlastností.

Ladislav Hagara | Komentářů: 0
22.9. 12:11 | Komunita

Na Humble Bundle lze získat hororovou počítačovou hru Outlast (Wikipedie) běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 2
22.9. 10:33 | Humor

Mozilla.cz upozorňuje na Knihu Mozilly (Wikipedie), tj. velikonoční vajíčko ve Firefoxu. Zobrazit jej lze zadáním about:mozilla do adresního řádku. Aktuální verze Firefoxu obsahuje proroctví 15:1 "Dvojčata Mamonu se rozhádala a jejich souboje uvrhly svět do nové tmy. Zvířeti se ale tma hnusila. A tak se stalo mrštnější a silnější, šlo vpřed a jeho počty rostly. A zvíře přineslo oheň a světlo do tmy". Firefox 57 bude obsahovat proroctví 11:14. To je zatím jenom v angličtině. Pomoci lze s překladem do češtiny.

Ladislav Hagara | Komentářů: 10
22.9. 01:22 | Zajímavý projekt
Před měsícem byla spuštěna kampaň na podporu chytrého telefonu Librem 5, jenž by měl respektovat bezpečnost, svobodu a soukromí uživatelů. Cílem kampaně je vybrat alespoň milion a půl dolarů. Aktuálně je vybráno přes 600 000 dolarů, tj. 40 %. Kampaň poběží ještě další měsíc. Podporu projektu oznámilo KDE i GNOME.
Ladislav Hagara | Komentářů: 42
22.9. 00:55 | Komunita

Agentura DISA (Defense Information Systems Agency) publikovala (pdf) Ubuntu 16.04 Security Technical Implementation Guide (STIG) (zip), tj. doporučené bezpečnostní nastavení Ubuntu 16.04. Ubuntu se tak dostalo mezi unixové operační systémy a linuxové distribuce AIX, HP-UX, Oracle Linux, Red Hat a Solaris [reddit].

Ladislav Hagara | Komentářů: 2
21.9. 22:55 | Bezpečnostní upozornění

CSIRT.CZ informuje, že byly vydány nové bezpečnostní aktualizace, které opravují několik zranitelných míst v Sambě. Útočník může využít zranitelnosti s cílem získání přístupu k potenciálně citlivých informací. Uživatelům a správcům je doporučeno, aby zkontrolovali bezpečnostní opatření pro CVE-2017-12150, CVE-2017-12151 a CVE-2017-12163 a provedli potřebné aktualizace.

Ladislav Hagara | Komentářů: 0
Těžíte nějakou kryptoměnu?
 (5%)
 (3%)
 (17%)
 (75%)
Celkem 564 hlasů
 Komentářů: 23, poslední včera 18:12
    Rozcestník

    Dotaz: Jiný zápis do souborů v Bash

    9.12.2012 22:49 LSD
    Jiný zápis do souborů v Bash
    Přečteno: 3424×
    Ahoj, pokud chci zapsat data do souboru tak to udělám asi takto
    echo "Toto uložím do souboru" > /tmp/test.txt
    
    pokud více textu, tak 
    
    echo "Toto uložím do souboru" > /tmp/test.txt
    echo "Toto taky uložím do souboru" >> /tmp/test.txt
    echo "A toto taky uložím do souboru" >> /tmp/test.txt
    Co nevím je, jak uložit nějaká data do souboru když je toho třeba na 500 řádků, to musím napsat každý řádek zvlášť s použitím echa.../printf...? Poradí někdo? Dík

    Řešení dotazu:


    Odpovědi

    9.12.2012 23:08 l4m4
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    (a) Použij here-doc
    cat >soubor <<EOF
    text
    text
    ...
    EOF
    
    (b) použij exec
    exec >soubor
    
    Toto je velmi pěkná a silná konstrukce v krátkých skiptech, ale jelikož ovlivňuje globálně stav shellu, tak není moc vhodná v situacích, kdy se má část skriptu/funkce chovat jako prostá funkce (neovliňující globální stav).
    9.12.2012 23:16 l4m4
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    Ještě bych doplnil třetí možnost: dej tu část skriptu do funkce
    foo() {
      echo text
      echo text
      ...
    }
    
    foo >soubor
    
    10.12.2012 23:37 Pavel Löbl | skóre: 7 | blog: vadnej_pixel
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    Jen pro doplneni cele reseni pomoci exec.
    echo "standartni vystup"
    
    # zalohuj stdout
    exec 5>&1
    # presmeruj stdout do soboru
    exec >out.txt
    
    echo "vystup do souboru"
    echo "standartni vystup" >&5
    
    # obnov stdout
    exec 1>&5
    
    echo "standartni vystup"
    
    martin-ux avatar 9.12.2012 23:22 martin-ux | skóre: 18 | Bratislava
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    k tomu b) od l4m4 by som este prilozil take c)
    script my.out
    #ls
    ...
    exit
    
    a vsetok output bude v my.out
    ..when you do things right, people won't be sure you've done anything at all..
    10.12.2012 17:54 Patrik Uhrak | skóre: 31 | blog: pato
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash

    Asi nerozumiem, bo na to, aby vase c) platilo, tak by musel byt na to skript pripraveny. To znamena, ze by v nom muselo byt nieco, co berie v uvahu moznost, ze sa ako argument zada cesta k suboru, do ktoreho sa vystup samotneho skriptu zapise. Ale urcite takto nefunguje kazdy skript, vid :

    #!/bin/bash
    
    data(){
    cat <<_EOF
    skript: "$0"
    pracovny adresar: "$PWD"
    date: "$(date)"
    _EOF
    }
    
    echo "Viem o argumente: $1 , ale ma vobec nezaujima, takze to dam sem "
    data
    
    patrik@thinkpad:~$ bash ./test.bash my.out
    Viem o argumente: my.out , ale ma vobec nezaujima, takze to dam sem 
    skript: "./test.bash"
    pracovany adresar: "/home/patrik"
    date: "Mon Dec 10 16:51:18 GMT 2012"
    

    Zadavatel dotazu sa snazi vytvorit vystup, ktory sa presmeruje do suboru.

    Ak by ste ale napisal:

    skript > my.out

    tak mate pravdu v tom, ze to bude v subore zapisane a to funguje vzdy, no stale to nie je odpovedou na dane zadanie. Riesenie s here dokumentom je podla mojho nazoru najidealnejsie, pokial sa nechceme starat aj o distribuciu dalsich suborov ako len samotneho skriptu.

    martin-ux avatar 10.12.2012 21:25 martin-ux | skóre: 18 | Bratislava
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    ono script sluzi na jednu vec:
         script -- make typescript of terminal session
    najvhodnejsia odpoved na autorovu otazku je to a).

    z toho b) mi prislo vhodne spomenut /viacmenej na okraj/ aj to moje c). do shelloveho scriptu by som ho ale nepouzil, na to je vhodne standardne presmerovanie.
    ..when you do things right, people won't be sure you've done anything at all..
    10.12.2012 21:57 Patrik Uhrak | skóre: 31 | blog: pato
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash

    Dik za rozsirenie obzorov, som o tom ani netusil, ze nieco take existuje a v spojitosti s jazykom (pisanim) ako napr. "dame session a pod.", co sa dneska pouziva, je naozaj niekedy zlozite vediet alebo pochopit, co vlastne autor mal na mysli. Vy ste to nepouzil, len mi to tak v prvom momente prislo ( script == skript ale v skutocnosti vo vasom prispevku script != skript ). Takze moja nevedomost a dnesny sposob vyjadrovania urobili svoje. :)

    martin-ux avatar 10.12.2012 22:22 martin-ux | skóre: 18 | Bratislava
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    np. heh, to by zase nenapadlo mna :) jj, dal som to do <pre> tagov na znak vypisu z terminalu.
    script sa zide hlavne pri generovani logov/dumpov z FW, konzol a pod.
    ..when you do things right, people won't be sure you've done anything at all..
    10.12.2012 11:53 cronin | skóre: 48
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    Dobré je oddeliť údaje - v tomto prípade text - od ich spracovania - v tomto prípade zapísanie do súboru. Takže údaje uložiť do súboru napr. data.txt a v skripte sa ich zapísanie do súboru scrvkne na triviálne
    cp /path/to/data.txt /tmp/test.txt
    
    alebo
    cat /path/to/data.txt > /tmp/test.txt
    
    pričom neskôr je jednoduché pridať ich predspracovanie, napr.:
    cat /pat/to/data.txt | grep -i ... | sed -e ... | cut -f ... | tr -d ... | sort -k ... > /tmp/test.txt
    
    [... a vyhrať dnešné kolo súťaže o najzbytočnejší cat, ja viem. :-)]
    12.12.2012 06:26 deadmail
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    cat >subor
    Napisat vsetky riadky (alebo vlozit/skopirovat) a na konci na novom riadku CTRL+D (teda koniec suboru/vstupu)
    xkucf03 avatar 13.12.2012 00:07 xkucf03 | skóre: 46 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    když je toho třeba na 500 řádků, to musím napsat každý řádek zvlášť
    Nemusíš – klidně můžeš na prvním řádku otevřít uvozovky a ukončit je až na posledním. Akorát se ti nesmí vyskytovat uvnitř textu (tam je escapuješ jako \")
    echo "toto je první řádek
    normálně pokračujeme dál
    tady nějaký text v \"uvozovkách\"
    poslední řádek" >  /tmp/test.txt
    Případně místo uvozovek můžeš použít apostrofy – podle toho, čeho máš v textu míň – takhle jde krásně zapisovat třeba XML do BASH skriptů. Akorát pozor na $ v případě uvozovek, aby se to neinterpretovalo jako proměnné.
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
    13.12.2012 12:51 cronin | skóre: 48
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    ... Akorát se ti nesmí vyskytovat uvnitř textu (tam je escapuješ jako \") ... ... Akorát pozor na $ v případě uvozovek, ...
    Akurát, že je okolo toho veľa "akurát". V prípade 500 riadkov by fakt bolo na mieste oddeliť údaje od ich spracovania. Možno keby sme vedeli, aký problém vlastne riešime, mohli by sme radiť lepšie.
    13.12.2012 13:31 Kit
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    LSD se od té doby neozval, tak je to asi jedno.

    Pro 500 řádek by se asi vyplatilo je umístit do nějakého souboru a vypsat catem. Heredoc by také nemusel být špatný.
    13.12.2012 18:31 cronin | skóre: 48
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    Pro 500 řádek by se asi vyplatilo je umístit do nějakého souboru a vypsat catem.
    Takto?
    13.12.2012 20:40 Kit
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    Možná. Možná i bez toho zbytečného cat. LSD položil dotaz a zmizel. Nevíme, co vlastně chtěl. Pokud chtěl třeba generovat HTML, tak bych mu raději doporučil xsltproc.
    martin-ux avatar 13.12.2012 20:21 martin-ux | skóre: 18 | Bratislava
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    no ak chcem pisat 500 riadkov do suboru, tak pouzijem textovy editor ;-)
    ..when you do things right, people won't be sure you've done anything at all..
    13.12.2012 16:23 l4m4
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    Ano, takhle si podomácku bastlí heredoc lidi, kteří neznají heredoc...
    13.12.2012 17:12 Franta
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    Heredoc je něco jako <![CDATA[…]]> v XML – když se člověku nechce escapovat speciální znaky a místo toho ohraničí konec textu nějakou speciální sekvencí. Ale zdaleka ne vždy je to potřeba. Proč to dělat složitě, když to jde jednoduše?

    Když jazyk umožňuje mít řetězec v uvozovkách apostrofech na víc řádků, tak to přece není žádné prasení, ale využívání možností jazyka.

    Proč by mělo být tohle:
    cat <<"EEE"
    ahoj $1,
    jak to jde?
    EEE
    
    cat <<EEE
    ahoj $1,
    jak to jde?
    EEE
    
    read a <<EOF
    omfg
    omfg
    EOF
    správnější než tohle:
    echo 'ahoj $1,
    jak to jde?';
    
    echo "ahoj $1,
    jak to jde?";
    
    a="omfg
    omfg";
    ?

    Na používání "…" a '…' na více řádků nevidím nic špatného.
    13.12.2012 17:49 l4m4
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    Proč to dělat složitě, když to jde jednoduše?
    S tím souhlasím, proto bych taky uvedené krátké příklady psal
    echo -e "ahoj $1,\njak to jde?"
    echo -e 'ahoj $1,\njak to jde?'
    a=$'omfg\nomfg'
    
    aby se s nimi snáz pracovalo.
    13.12.2012 17:54 Franta
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    Tohle mi jednodušší nepřijde – interpretovat si v hlavě \n – místo toho na zalomení řádku uvnitř "…" prostě kouknu a vidím, na první pohled.
    13.12.2012 18:59 pavel
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    Nevíte někdo, jak to udělat v awk? Abych nemusel psát 50 řádků typu:
    print nějaký\"html\"řádek
    print dalsi\"radek\"
    ....
    
    13.12.2012 19:39 l4m4
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    Možná ti to nepřijde, ale je to tak. Příkaz je na jednom řádku a lze ho libovolně odsazovat. Pro krátké texty ideální.
    xkucf03 avatar 14.12.2012 00:48 xkucf03 | skóre: 46 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Jiný zápis do souborů v Bash
    Pokud je to pár slov a jedno \n, tak možná, ale pro delší texty (i pár řádek) je to dost opruz a nepřehledné.

    A hlavně ještě k původnímu dotazu – když tazatel napsal:
    echo "Toto uložím do souboru" > /tmp/test.txt
    echo "Toto taky uložím do souboru" >> /tmp/test.txt
    echo "A toto taky uložím do souboru" >> /tmp/test.txt
    tak je nejjednodušším a nejpřímočařejším vylepšením jeho kódu to, že prostě uvozovky neukončí a normálně vkládá konce řádků, pokračuje dál a dál a nemusí je ukončovat a posílat do souboru jednotlivé řádky. Heredoc je samozřejmě taky dobré zmínit, ale v první řadě se hodí vědět, že BASH podporuje víceřádkový text v uvozovkách/apostrofech.
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net

    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.