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 10:33 | Komunita

V pondělí měl na YouTube online premiéru otevřený krátký 2D film Hero vytvořený v 3D softwaru Blender. Cílem stejnojmenného projektu Hero je vylepšit nástroj Grease Pencil (tužka) v Blenderu 2.8.

Ladislav Hagara | Komentářů: 3
včera 23:22 | Nová verze

Byla vydána verze 4.0 kolekce svobodného softwaru umožňujícího nahrávání, konverzi a streamovaní digitálního zvuku a obrazu FFmpeg (Wikipedie). Přehled novinek v Changelogu (GitHub).

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

Včera vydanou hru Rise of the Tomb Raider pro Linux lze do pondělí 23. dubna koupit na Steamu s 67% slevou. Místo 49,99 € za 16,49 €.

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

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

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

Společnost Apple koupila před třemi lety společnost FoundationDB vyvíjející stejnojmenný NoSQL databázový systém FoundationDB (Wikipedie). Včera byl tento systém uvolněn jako open source pod licencí Apache 2.0. Zdrojové kódy jsou k dispozici na GitHubu.

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

Po dva a půl roce od vydání verze 5.7 oznámila společnost Oracle vydání nové major verze 8.0 (8.0.11) databázového systému MySQL (Wikipedie). Přehled novinek v poznámkách k vydání. Zdrojové kódy komunitní verze MySQL jsou k dispozici na GitHubu.

Ladislav Hagara | Komentářů: 2
19.4. 14:44 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 151. brněnský sraz, který proběhne v pátek 20. 4. od 18:00 hodin v restauraci Benjamin na Drobného 46.

Ladislav Hagara | Komentářů: 0
19.4. 13:33 | Nová verze

Byla vydána verze 18.04.0 KDE Aplikací (KDE Applications). Přehled novinek v kompletním seznamu změn a na stránce s dalšími informacemi.

Ladislav Hagara | Komentářů: 0
19.4. 13:11 | Nová verze

Bylo oznámeno vydání nové stabilní verze 1.26 a beta verze 1.27 open source textového editoru Atom (Wikipedie). Přehled novinek i s náhledy v příspěvku na blogu. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
19.4. 12:55 | Komunita

Dle plánu byla dnes vydána hra Rise of the Tomb Raider (Wikipedie) pro Linux. Koupit ji lze za 49,99 €.

Ladislav Hagara | Komentářů: 3
Používáte na serverech port knocking?
 (3%)
 (7%)
 (46%)
 (27%)
 (17%)
Celkem 339 hlasů
 Komentářů: 29, poslední 5.4. 12:25
    Rozcestník
    Štítky: není přiřazen žádný štítek

    Dotaz: Jak zjednodušit tento příkaz

    pepe_ avatar 8.11.2013 00:55 pepe_ | skóre: 47
    Jak zjednodušit tento příkaz
    Přečteno: 790×
    celkem=$(ls -1 /usr/share/fortune/cs/*.dat | wc -l ) ; soubor=$(( $RANDOM % $celkem )) ; rec=$(ls -1 /usr/share/fortune/cs/*.dat | head -n $soubor | tail -1) ; fortunik=${rec%%.*} ; fortune $fortunik

    Je vyžadován nainstalovaný program fortune,fortune-mod-cs

    Řešení dotazu:


    Odpovědi

    8.11.2013 06:29 Petr MOTEJLEK | skóre: 6
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz
    Ahoj,

    Jen, jestli tomu dobře rozumím - tobě jde o vybrání náhodného souboru z konkrétního adresáře a spuštění programu fortune nad tím souborem, ano?
    pepe_ avatar 8.11.2013 09:24 pepe_ | skóre: 47
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz

    Ano , v archu mám :

    ls /usr/share/fortune/cs
    cimrman      citat.dat  hornicek        ignac.dat   klasik-cz      lkml.dat    mikulas      murphy.dat     plihal        pratchett.dat  reddwarf      stoa1.dat   vodnansky      wodehouse.dat
    cimrman.dat  filmy      hornicek.dat    jerome      klasik-cz.dat  lodge       mikulas.dat  parafraze      plihal.dat    prislovi       reddwarf.dat  stopar      vodnansky.dat  wright
    citace       filmy.dat  chesterton      jerome.dat  klasik-sk      lodge.dat   mladik       parafraze.dat  pocitace      prislovi.dat   skala         stopar.dat  wikiquote      wright.dat
    citace.dat   guth       chesterton.dat  josef       klasik-sk.dat  market      mladik.dat   parkinson      pocitace.dat  rdvcitaty      skala.dat     valka       wikiquote.dat  zemeplocha
    citat        guth.dat   ignac           josef.dat   lkml           market.dat  murphy       parkinson.dat  pratchett     rdvcitaty.dat  stoa1         valka.dat   wodehouse      zemeplocha.dat
    
    

    Chci dát do bashrc kde nyní mám

    #
    # ~/.bashrc
    #
    
    # If not running interactively, don't do anything
    [[ $- != *i* ]] && return
    
    alias ls='ls --color=auto'
    PS1="\[\033[0;37m\]\342\224\214\342\224\200\$([[ \$? != 0 ]] && echo \"[\[\033[0;31m\]\342\234\227\[\033[0;37m\]]\342\224\200\")[$(if [[ ${EUID} == 0 ]]; then echo '\[\033[0;31m\]\h'; else echo '\[\033[0;33m\]\u\[\033[0;37m\]@\[\033[0;96m\]\h'; fi)\[\033[0;37m\]]\342\224\200[\[\033[0;32m\]\w\[\033[0;37m\]]\n\[\033[0;37m\]\342\224\224\342\224\200\342\224\200\342\225\274 \[\033[0m\]"
    alias pacman='sudo pacman'
    alias nmap='sudo nmap -sV -O -v '
    alias ssh='ssh -X -C '
    export EDITOR="mcedit"
    celkem=$(ls -1 /usr/share/fortune/cs/*.dat | wc -l ) ; soubor=$(( $RANDOM % $celkem )) ; rec=$(ls -1 /usr/share/fortune/cs/*.dat | head -n $soubor | tail -1) ; fortunik=${rec%%.*} ; echo -e "Hláška '"${fortunik##*/}"'\n" ; fortune $fortunik
    



    alias kec= .....          ale ten dlouhej příkaz ze stejnou funkcí mi to nežere

     

    takže potřebuju něco aby ve složce usr/share/fortune/cs/ spočítalo počet souborů bez koncovky .dat , pak náhodně jeden vybralo a spustilo se správným parametrem fortune.

    8.11.2013 09:11 NN
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz
    Treba, ale urcite se najde optimalnejsi nahodny vyber:
    fortune `find * -name '*.txt' -print | sort -R | head -n1 | sed s/\.txt//`
    pepe_ avatar 8.11.2013 09:26 pepe_ | skóre: 47
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz

    Jo je to asi lepší :   find /usr/share/fortune/cs/* -name '*.dat' -print | sort -R | head -n1 | sed s/\.dat//

    8.11.2013 09:41 potato
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz
    find /usr/share/fortune/cs/*

    určitě není lepší. Pokud jsou tam jen soubory, není zapotřebí find vůbec

    ls /usr/share/fortune/cs/*.dat

    Pokud tam jsou i adresáře, tak je nesmysl expandovat argument findu

    find /usr/share/fortune/cs -name '*.dat'
    pepe_ avatar 8.11.2013 09:46 pepe_ | skóre: 47
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz

    Asi nerozumíš jednoduchému dotazu že se nesmí zobrazovat soubory .dat  ale bez přípony a to s uvedením cesty nijak nezkrátí. příkaz.

    To co je ve složce je již v předchozích příspěvcích ukázáno.

    8.11.2013 09:50 potato
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz
    Asi nerozumíš tomu, že mluvím o findu. Musím ti tam skutečně nakopírovat celý zbytek té roury, který se nemění?
    pepe_ avatar 8.11.2013 10:07 pepe_ | skóre: 47
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz

    rec=$(find /usr/share/fortune/cs -name '*.dat' | sort -R | head -n1 | sed s/\.dat//) ; echo -e "Hláška -"${rec##*/}"-\n" ; fortune $rec ; echo

     

    Dobře , zkráceno podle tebe (nějak sem si přečetl jen začátek a konec tvé reakce)

    Fuky avatar 9.11.2013 10:08 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz
    sort -R | head -n1

    lze zkrátit na:

    shuf -n1

    How can I select random files from a directory in bash?
    pepe_ avatar 9.11.2013 11:08 pepe_ | skóre: 47
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz

    Děkuji , to jsem vůbec nikde nenašel .

    rADOn avatar 8.11.2013 13:46 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz
    To co chces je standartni chovani programu fortune (plus ti to jeste znormalizuje podle poctu fortunek v jednotlivych souborech), co te nuti objevovat zrovna tohle kolo?
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    pepe_ avatar 8.11.2013 23:46 pepe_ | skóre: 47
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz

    Bohuzel standartni chovani neni vypsat nazev databaze hlasek ze ktere se prave ukazuje text a take ze nechci jinou nez slozku cesky .

    Řešení 2× (Cubic, Patrik Uhrak)
    rADOn avatar 13.11.2013 14:47 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz
    fortune -c /usr/share/fortune/cs
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    pepe_ avatar 13.11.2013 15:18 pepe_ | skóre: 47
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz

    To je opravdu easy , díky !

    rADOn avatar 13.11.2013 17:11 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz
    Doufám že sis z toho vzal poučení :-)
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    9.11.2013 10:52 Patrik Uhrak | skóre: 31 | blog: pato
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz

    A takto by to neslo:

    fortunecz(){ set *.dat; chosen=$(( $RANDOM % $# )); eval fortune \${${chosen}%%.*};}

    a dat to do ~/.bashrc napr. ako ste navrhli ?

    pepe_ avatar 9.11.2013 11:07 pepe_ | skóre: 47
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz

    #fortunecz
    fortune:/bin/bash not a fortune file or directory
    No fortunes found

    ne takto mi to nefunguje

    9.11.2013 11:30 Patrik Uhrak | skóre: 31 | blog: pato
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz

    Nefunguje, bo som zabudol na adresar:

    fortunecz(){ dir=/usr/share/fortune/cs/; set "$dir"/*.dat; chosen=$(( $RANDOM % $# )); eval fortune \${${chosen}%%.*}; }

    Som to odskusal priamo v adresare s nimi, tak sa chybicka vloudila. Ale inak u mna to funguje.

    9.11.2013 12:08 Patrik Uhrak | skóre: 31 | blog: pato
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz

    Taktiez je problem, ze premenna chosen niekedy ma hodnotu 0, co je shell samotny. Bud zavolat random znova, alebo jednoducho takto ( a ma tu mozno za to aj dakto zozerie :) ):

    fortunecz(){ dir=/usr/share/fortune/cs/; set "$dir"/*.dat; chosen=$(( $RANDOM % $# + 1 )); eval fortune \${${chosen}%%.*}; }
    9.11.2013 12:29 Patrik Uhrak | skóre: 31 | blog: pato
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz

    Ok, ja dneska koncim uz, lebo co je moc, to je moc. Fortune sice vzdy vrati daco, ale problem je, ze tym pripocitanim 1 sa sice odstrani chyba ohladne volania $0, ale na hornom konci rozsahu bude hodnota $n prazdna a fortune zoberie hlasku aj z ineho ako ceskeho adresara. Takze takto by to mohlo byt, aspon ja by som bol spokojny:

    fortunecz(){ dir=/usr/share/fortune/cs/; set "$dir"/*.dat; chosen=$(( $RANDOM % $# )); [[ $chosen -eq 0 ]] && let chosen++; eval fortune \${${chosen}%%.*}; }

    Mojim cielom bolo cisto v bash-i to vyriesit, lebo si osobne myslim, ze volat find, tail, sort pre tuto ulohu je zbytocne. p.s: Asi by som mal mat daky casovy limit vynuteny po zobrazeni nahladu, kedy sa postavim zo stolicky a zacnem aj premyslat, nez nieco odoslem. :)

    Fuky avatar 9.11.2013 18:31 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz
    Lze to řešit i následovně:

    $ f=( /path/*.dat ) result="${f[RANDOM%${#f[@]}]%.dat}" && fortune "${result##*/}"

    Nevidím jediný rozumný důvod proč to řešit čistě v Bashi. Oproti volání find a shuf je to výrazně méně čitelné.

    BTW: Jinak co se týče Bashe, určitě bych se snažil vyhnout psát v něm co rozsáhlejšího, skripty jsou hodně nečitelné a špatně udržovatelné. Rozhodně je mnohem lepší použít Python.
    13.11.2013 17:18 Pavel
    Rozbalit Rozbalit vše Re: Jak zjednodušit tento příkaz
    Nebo Perl... :-D

    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.