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 14:44 | Komunita

Mozilla.cz informuje, že Firefox bude možná upozorňovat na úniky vašich hesel. V Mozille prototypují upozorňování na únik informací o vašem účtu, pokud se na seznamu Have I been pwned? objeví služba, ke které máte ve Firefoxu uložené přihlašovací údaje. Informace se objevila v pravidelném newsletteru o vývoji Firefoxu.

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

Společnost ZONER informuje o bezpečnostním incidentu, při kterém došlo ke zcizení a zveřejnění části přihlašovacích údajů zákazníků k elektronické poště a webhostingu CZECHIA.COM.

Ladislav Hagara | Komentářů: 0
22.11. 23:44 | Nová verze

Byla vydána nová stabilní verze 1.13 (1.13.1008.32) webového prohlížeče Vivaldi (Wikipedie). Z novinek vývojáři zdůrazňují možnost zobrazení otevřených i uzavřených listů pomocí ikonky Okno na postranní liště a vylepšené stahování (YouTube). Nejnovější Vivaldi je postaveno na Chromiu 62.0.3202.97.

Ladislav Hagara | Komentářů: 9
22.11. 20:55 | Nová verze

Byla vydána verze 2017.3 dnes již průběžně aktualizované linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux. Aktualizovat systém lze pomocí příkazů "apt update; apt dist-upgrade; reboot". Z novinek lze zmínit 4 nové nástroje: InSpy, CherryTree, Sublist3r a OSRFramework.

Ladislav Hagara | Komentářů: 1
22.11. 01:55 | Bezpečnostní upozornění

Společnost Uber potvrdila bezpečnostní incident a únik dat v roce 2016. Unikly údaje o 57 milionech cestujících (jména, emailové adresy a čísla mobilních telefonů) a 600 tisících řidičích (navíc čísla řidičských průkazů).

Ladislav Hagara | Komentářů: 1
21.11. 23:44 | Humor

Co vypíše příkaz man půl hodiny po půlnoci? Text "gimme gimme gimme". Jedná se o virtuální velikonoční vajíčko připomínající skupinu ABBA a její hit Gimme! Gimme! Gimme! (A Man After Midnight). Problém nastane, pokud gimme gimme gimme nabourá automatizované testování softwaru. To se pak příkaz man musí opravit [Bug 1515352] [reddit].

Ladislav Hagara | Komentářů: 10
21.11. 18:11 | Zajímavý článek

Mozilla.cz informuje, že Firefox na Fedoře podporuje Client Side Decorations. Firefox na Linuxu se vykresluje včetně standardního záhlaví okna, které je v případě webového prohlížeče většinou nadbytečné a ubírá drahocenné vertikální místo na obrazovce. Verze distribuovaná uživatelům Fedory však nyní obsahuje experimentální podporu pro takzvané Client Side Decorations, které umožňují vykreslování „oušek“ panelů do záhlaví okna.

Ladislav Hagara | Komentářů: 12
21.11. 05:00 | Bezpečnostní upozornění

Maxim Goryachy a Mark Ermolov ze společnosti Positive Technologies budou mít v prosinci na konferenci Black Hat Europe 2017 přednášku s názvem "Jak se nabourat do vypnutého počítače, a nebo jak v Intel Management Engine spustit vlastní nepodepsaný kód". O nalezeném bezpečnostním problému informovali společnost Intel. Ta bezpečnostní problém INTEL-SA-00086 v Intel Management Engine (ME), Intel Server Platform Services (SPS) a Intel

… více »
Ladislav Hagara | Komentářů: 47
21.11. 01:33 | Zajímavý projekt

Na Humble Bundle byla spuštěna akce Humble Book Bundle: Java. Za 1 dolar a více lze koupit 5 elektronických knih, za 8 dolarů a více 10 elektronických knih a za 15 dolarů a více 15 elektronických knih věnovaných programovacímu jazyku Java od nakladatelství O'Reilly. Peníze lze libovolně rozdělit mezi nakladatelství O'Reilly, neziskovou organizaci Code for America a Humble Bundle.

Ladislav Hagara | Komentářů: 0
21.11. 00:11 | Zajímavý projekt

Článek na OMG! Ubuntu! představuje rodinu písma IBM Plex. Jedná se o open source písmo (GitHub) navržené a uvolněné společností IBM (YouTube, Carbon Design System). Ukázka na Font Squirrel.

Ladislav Hagara | Komentářů: 14
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (9%)
 (1%)
 (1%)
 (1%)
 (75%)
 (14%)
Celkem 756 hlasů
 Komentářů: 37, poslední 21.11. 15:21
    Rozcestník
    Štítky: není přiřazen žádný štítek

    Dotaz: Tvorba shellového scriptu

    13.5.2015 09:55 Jakubysko
    Tvorba shellového scriptu
    Přečteno: 548×
    Dobrý den. Chtěl bych si napsat funkci pro terimnál a líbí se mi spouštění funkcí s přepínači, něco jako myfce --new "/dir" --user "Name". Zjistil jsem, že pak můžu pomocí $# zjistit počet parametrů ale nezjistil jsem jak zjistit počet přepínačů. Jde něco takového vůbec udělat? Díky moc.

    Odpovědi

    Pavel Stárek avatar 13.5.2015 10:06 Pavel Stárek | skóre: 43 | blog: Tady bloguju já :-) | Kolín
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Zde How do I parse command line arguments in bash? je několik případů jak to udělat.
    Kdo chce, hledá způsob; kdo nechce, hledá důvod.
    13.5.2015 10:25 Jakubysko
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Díky a můžu pak z takové funkce volat tu stejnou funkci s jiným parametrem ?
    13.5.2015 11:44 #Tom | skóre: 32 | blog: Inspirace, aneb co jsem kde vyhrabal
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Určitě, jen je potřeba dát si pozor na obsah proměnných nastavených ve funkci, které jsou ve výchozím stavu považovány za globální. Lokální proměnné je třeba deklarovat s klíčovým slovem local, nebo toto použít při jejich přiřazení.
    13.5.2015 13:03 Jakubysko
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Super, díky za info. Kdyby uměl bash class tak je to nejlepší program co znám :-D
    14.5.2015 09:26 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Zjistíš, že to zas tak hezké není. Hodně programátorů zapomíná používat uvozovky a pak se jim skripty rozbíjejí při prvním výskytu mezery v názvu souboru (ahoj autotools!). Když né mezery, tak se to zas rozbije, pokud je v názvu souboru znak nového řádku (i když málo pravděpodobné, tak stejně, název souboru prostě je libovolná sekvence znaků/bytů (kódování vůbec kernel více méně nezajímá), kromě '/' a nulového byte. Bash na tom chcípá. A díky tomu, že bash (a jiné shelly) nepodporuje nulový byte v řetězci, nelze ho použít jako univerzální oddělovač, třeba k použití v cyklech jako $IFS. Pak existují příkazy, na které se nelze spoléhat, že udělají, co chcete. Třeba echo. Některé bere "-e" jako argument, jiné ne. Nemůžete tedy spolehlivě vypsat "-e". -- to neinterpretuje jako konec argumentů. Zbývá tedy použít print, echo je prostě nebezpečné. Můžou za to v podstatě GNU rozšíření přidávající různé argumenty. Pak taky demence, která uřezává znaky nových řádků z výstupu programu do proměnné. Musíte pak v podstatě řešit hacky typu použití print pro vypsání náhodného znaku za příkazem, a ten pak odříznout. Další programy přidávají newline úmyslně. takže musíte odříznout ten znak a jeden newline. Bash ale sám odřízne všechny newline znaky, co jsou nakonci.
    14.5.2015 10:45 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Potřebuju to vylepšit. Potřebuju dostat jméno každého adresáře v tom aktuálním do proměnné pro použití v cyklu. Jména adresáře mohou obsahovat všechny znaky kromě '/' a nulového byte. Mělo by to fungovat s busyboxem (jeho find nemá printf, printf0). Busybox nemá base64 applet, takže base64 použít nemůžu.
    #!/bin/sh
    
    for FILENAME_BASE64 in $(find . -type d -exec base64_fn.sh {} \;)
    do
    	FILENAME=$(printf '%s' "${FILENAME_BASE64}" | base64 -d; printf x)
    	FILENAME="${FILENAME%?}"
    	
    	printf '%s\n' "${FILENAME}"
    done
    
    base64_fn.sh:
    #!/bin/sh
    printf '%s' "${1}" | base64
    
    14.5.2015 11:32 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Nojo busybox, tam už si musí každej poradit sám -- a využít k tomu veškerou svou kreativitu.
    14.5.2015 15:09 #Tom | skóre: 32 | blog: Inspirace, aneb co jsem kde vyhrabal
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Tak napsat si vlastní base64 kodér/dekodér není těžké, kromě céčka jsem to dělal i v javascriptu. :) Na druhou stranu není podle mě nutné používat nutně nejúspornější kódování: co třeba toto?
    echo -e "$(echo -ne "ABCDEFGH" | hexdump -ve '1/1 " x%02x"' | tr ' ' '\\')"
    
    Oba potřebné program busybox má. Navíc odpadá program na zpětný převod, (ba)sh ji udělá sám.
    14.5.2015 21:44 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    a má busybox bash :)
    14.5.2015 21:52 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Hmm, místo vnořeného echo použiju printf, ale čím nahradím to echo -e? V busyboxu funguje, ale v dashi:
    $ echo -e "\x41\x42\x43\x44\x45\x46\x47\x48\x0a"
    -e \x41\x42\x43\x44\x45\x46\x47\x48\x0a
    
    14.5.2015 22:22 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Tak jsem hexdumpu dal formát x%03o pro oktal čísla. Sežere to pak
    $ printf '%s' "ABCDEFGH" | hexdump -ve '1/1 " %03o"' | tr ' ' '\\'
    \101\102\103\104\105\106\107\110
    $ printf '%b' "\101\102\103\104\105\106\107\110"
    ABCDEFGH
    
    14.5.2015 22:27 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    proč ne jen?

    printf "\x41\x42\x43\x44\x45\x46\x47\x48\x0a"
    14.5.2015 22:39 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Nefunguje to v dashi:
    jardik@Jardik-PC:~/Downloads$ dash
    $ printf "\x41\x42\x43\x44\x45\x46\x47\x48\x0a" 
    \x41\x42\x43\x44\x45\x46\x47\x48\x0a 
    $ type printf
    printf is a shell builtin
    $
    
    14.5.2015 22:41 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    %b + hex to taky nesní. Pouze oktal :(
    14.5.2015 22:42 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Teď koukám, že to sní i bez %b v tom oktalu:
    $ printf "\101\102\103\104\105\106\107\110"
    ABCDEFGH
    
    Ještě to pak zkusím ve FreeBSD sh.
    14.5.2015 22:42 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    aha, v ashi to jde
    14.5.2015 22:55 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    sh ve FreeBSD hexa taky nebere, octal vezme. Hexdump je tam taky. Takže se zdá, že máme řešení pro cykly na souborech i s newline v názvech. Děkuji :-)
    15.5.2015 18:35 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Příloha:
    Trochu jsem to zkoušel a shledal jsem to nepoužitelné! Použitelné je to možná pro pár souborů (adresářů), ale už ne pro stovky, kdy seznam za příkazem for je tak dlouhej, že to prostě nejde použít. Udělal jsem tedy své řešení, které je na tom lépe. Je to opravdu zajímavý problémek :).
    15.5.2015 22:12 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Příloha:
    jak mívam ve zvyku, tak ještě jedna učesaná verze :). Myslím, že to funguje dobře. Propašovat plné názvy souborů se do smyčky zdařilo :). Teď už to brzdí jen ten exec programu find.
    16.5.2015 12:10 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Super! Určitě se to bude někdy hodit.
    14.5.2015 10:51 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Díky za zajímavé shrnutí možných problémů. Ale na druhou stranu, není to v reálu až zas tak kritické :). 1) Uvozovky není radno zapomínat 2)znak nového řádku v názvu souboru může použít jen nějaký šťoura 3) echo je dobré používat pouze bez parametrů a jinak pužívat šikovnější printf 4) odřezávání jsem moc nepochopil (načtení bez konce řádku mi spíš vyhovuje -- je to běžná praxe při načítání textu awk, sed, vi aj.)
    14.5.2015 11:12 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    4) pokud jde o CRLF, pak je třeba CR nějak odseparovat -- stačí použít ${file%^M}
    14.5.2015 12:40 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Příloha:
    Bez řádku ... někde. Kdyby to alespoň ořízlo jen jeden, který programy opravdu často přidávají. Ale proč všechny poslední znaky nových řádků, to mi hlava nebere. Někde je takový znak opravdu nežádoucí. Třeba v již zmíněné potřebě jména souboru, které ho obsahovat může (i když to považujete za prasárnu). Nebo třeba k zjištění md5 součtu něčeho, kde znak nového řádku zapříčiní naprosto jiný výstup.

    Koukněte, jak se podělá i bash autocomplete, když je tam newline. A jak to třeba zvládne pcmanfm při editaci názvu s takovým znakem (ukáže mi ho jako 00 0A.
    14.5.2015 13:00 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Příloha:
    Takhle třeba. Sežere to newline a máte adresář, co neexistuje. A tímhle trpí spousta skriptů, co s něčím takovým nepočítají.

    Nebo podívejte třeba na spouštěcí skript pro FreeRapid Downloader, který jsem trošičku osekal a přidal printf:
    # Handle symlinks
    PROGRAM="$0"
    while [ -L "$PROGRAM" ]; do
    	PROGRAM=`readlink -f "$PROGRAM"`
    	printf 'symlink to: %s\n' "\"${PROGRAM}\""
    done
    printf 'cd to: %s\n' \""`dirname \"$PROGRAM\"`"\"
    cd "`dirname \"$PROGRAM\"`"
    
    Autor se snažil být chytrý a počítal se symlinkama. Snaží se dostat adresář, kde se nachází spouštěný skript. A nepochodil. Můj se nachází v /home/jardik/Apps/FreeRapid-0.9u4<newline>, a on se snaží cd do /home/jardik/Apps/FreeRapid-0.9u4, který neexistuje.
    14.5.2015 13:01 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    jé, někdo kdo používá pcmanfm. Taky jsem ho používal, ale protože potřeboval externí knihovny a nesedlo mi tam pár věcí, přešel jsem na spacefm. By mi zajímalo, jestli je spacefm taky tak chytrej (budu to muset zkusit, až budu mít čas).
    Jendа avatar 14.5.2015 13:08 Jendа | skóre: 74 | blog: Výlevníček | JO70FB
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Podle mě je to věcí GTK, filemanager prostě udělá textbox a tohle do něj vyblije, GTK udělá čtvereček s hexakódem.
    Why did the multithreaded chicken cross the road? to To other side. get the
    14.5.2015 13:33 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Něco na tom bude. Ale GIO (které pcmanfm využívá) má taky 3 různý položky pro název souboru. Jeden "skutečný" název, pak jeden určený pro zobrazení (to ukazuje takový ty sračky jako "(invalid encoding)" v názvech souborů když to není platný utf8) a další určený pro "editaci názvu". Asi je potřeba je správně použít/rozlišovat, aby to klikátko správně fungovalo.
    14.5.2015 13:35 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    tu reference.
    Jendа avatar 14.5.2015 13:02 Jendа | skóre: 74 | blog: Výlevníček | JO70FB
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    znak nového řádku v názvu souboru může použít jen nějaký šťoura
    No právě - když hrozí, že zpracováváš soubory od náhodných útočníků ze sítě…
    Why did the multithreaded chicken cross the road? to To other side. get the
    14.5.2015 14:08 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    A co tedy pro takové případy použít? Perl?
    14.5.2015 14:57 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    jinak, to jardíkovo řešení není špatné. Až budu chtít bejt hodně akurátní, tak to použiju.
    Jendа avatar 14.5.2015 20:06 Jendа | skóre: 74 | blog: Výlevníček | JO70FB
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Mně se dobře píše v Pythonu (bonusem je že je to asi tisíckrát rychlejší než Bash), ale můžeš si vybrat co chceš…
    Why did the multithreaded chicken cross the road? to To other side. get the
    14.5.2015 21:09 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Ale to už se nebavíme o busyboxu, a v takovém případě se dá mnohdy s úspěchem použít jen find a -print0 a k tomu nějakej ten xarg.
    Jendа avatar 14.5.2015 12:58 Jendа | skóre: 74 | blog: Výlevníček | JO70FB
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Hodně programátorů zapomíná používat uvozovky a pak se jim skripty rozbíjejí při prvním výskytu mezery v názvu souboru (ahoj autotools!). Když né mezery, tak se to zas rozbije, pokud je v názvu souboru znak nového řádku
    Ono napsat v bashi skript který přežije newlines v názvech souborů je dost komplikované.
    Třeba echo. Některé bere "-e" jako argument, jiné ne.
    -n je ještě lepší, to neprojde snad nikde.
    Why did the multithreaded chicken cross the road? to To other side. get the
    14.5.2015 14:20 rastos | skóre: 60 | blog: rastos
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Nemyslím, že by som sa stretol s tým, že by sa bash v tomto choval nejak na stroji X a inak na stroji Y. Pokiaľ ja viem, tak echo je built-in bash a pozná aj -e aj -n. Pred nejakým časom ubuntu začalo používať dash, ktorý (ako tak pozerám) nepozná -e, ale pozná -n. Ale každopádne tu máme ešte /bin/echo (z coreutils), ktoré pozná aj -n aj -e.

    Tak kde to teda nefunguje? Mne to pripadá, že človek len musí mať jasné, aké echo (resp. shell) používa a potom sa to chová konzistentne.
    Jendа avatar 14.5.2015 20:06 Jendа | skóre: 74 | blog: Výlevníček | JO70FB
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Tak kde to teda nefunguje?
    Vždyť sis sám odpověděl přesně tím co jsem napsal - všude.
    Why did the multithreaded chicken cross the road? to To other side. get the
    14.5.2015 21:31 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Tak kde to teda nefunguje?

    V POSIXu je echo pouze bez parametrů. Všechny shelly, které se drží POSIXu mají tedy echo bez parametru (dash, ash, aj.). Všechny ty věcy, které se nechají udělat v bashi s parametry -e nebo -n, se mají dělat -- v souladu s POSIXem -- pomocí příkazu printf. Jak echo tak printf jsou built-in. Není tedy problém používat printf. Naopak je problém používat externí echo, které bude pomalejší, Zvykněte si používat printf a echo pouze bez parametru a nebudete mít problém. Zkuste si echo "-e" a pak printf '%s' "-e".
    14.5.2015 22:04 Jardík
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Pokud mám busybox, tak ho mám asi proto, že ve svém systému nechcu bash, coreutils apod.
    15.5.2015 19:20 Jakubysko
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    Koukám, že se to nějak zvrhlo :-D
    15.5.2015 19:47 RM
    Rozbalit Rozbalit vše Re: Tvorba shellového scriptu
    jen trochu ;)

    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.