V pátek 28. srpna se v Praze uskuteční již osmý Mobile Linux Hackday. Jako obvykle se potkáme v pražské pobočce SUSE v Karlíně na Křižíkově, takže kromě mobilního Linuxu je to tentokrát i příležitost přijít se podívat na nově zrekonstruované kanceláře. Začínáme v 10:00, ale dorazit můžete samozřejmě kdykoliv v průběhu dne. Setkáním vás provede David Heidelberg, vývojář GPU ovladačů v Mesa 3D a jeden z hlavních lidí české komunity kolem … více »
Představen byl Raspberry Pi Compute Module 5 Programming Jig. Jedná se o zařízení umožňující připravit Compute Module 5 do plně funkčního stavu bez nutnosti použití dalších vstupně / výstupních desek. Podporuje automatizaci pomocí nástroje rpi-sb-provisioner. Podrobnosti v dokumentaci.
Hackeři ve Francii ukradli data více než půl milionu daňových poplatníků. Je to jeden z největších hackerských útoků v dějinách země. O útoku z konce června informovala až teď daňová správa. Teprve od pondělí dotčeným občanům zasílá e-maily s instrukcemi, jak postupovat dál. Hackeři se sice nedostanou k penězům dotyčných, hrozí ale věrohodné podvody. Hackeři získali třeba celá jména, údaje o rodinných příslušnících nebo také údaje o
… více »Společnost Framework představila nový Framework Laptop 12 s Intel Core Series 3, Thunderbolt 4, Wi-Fi 7, volitelnou čtečkou otisků prstů a podsvícenou klávesnicí s open-source firmwarem ZMK. Objednat lze s předinstalovanou Fedorou 44 KDE Plasma.
Byl vydán Mozilla Firefox 154.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 154 bude brzy k dispozici také na Flathubu a Snapcraftu.
Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 168 (pdf).
Open-source citační manažer Zotero (Wikipedie, GitHub) byl vydán v nové major verzi 10. Přehled novinek v příspěvku na blogu.
Interaktivní editor binárních dat GNU poke byl vydán ve verzi 5.0 (seznam změn).
Byla vydána verze 0.85 telnet a ssh klienta PuTTY (Wikipedie). Řešeno je 5 zranitelností.
Byly publikovány novinky z vývoje GIMPu. Pracuje se na novém formátu souborů. Stávající binární XCF bude nahrazen "zazipovaným XML". XCF zůstane plně podporován pouze pro načítání starých souborů.
cd "~/data/psi/"
filter="-mtime -2"
exclude='( ! -iname "*ajax*" )'
find . $filter $exclude -type f
zobrazí i "ajax"
cd "~/data/pes/"
filter="-mtime -2"
exclude='\( ! -iname "*ajax*" \)'
find . $filter $exclude -type f
dostanu find: paths must precede expression: \(
Nějak nevím, jak to sestavit, zkoušel jsem pár dalších možností, ale většinou jsem skončil u stejné chyby jako ve druhém případě. Někde dělám chybu, ale nevím kde
Díky za nasměrování
Řešení dotazu:
paths must precede expression: \( by te mela trknout: jak to ze find vidi to zpetny lomitko? To tam prece davas aby ti zavorku nesezral shell. Do findu by to melo projit uz expandovany cili jestli je tam to lomitko videt tak se ta expanze neprovedla a mas tam zbytecny escapovani navic. Cili ty pitomy lomitka vymaz.
Bych si tak od boku strelil ze jsou za tim uvozovky/apostrofy, tam se vynechava vic expanzi.
find -mtime -2 ( ! -iname "*ajax*" )předáváte do
find 7 parametrů.
Když použijete proměnné, je celá proměnná považovaná za jeden parametr. Také ji tak nastavujete – máte její obsah v uvozovkách, tj. je to celé jeden text, včetně těch mezer. Takže váš příkaz
find . $filter $exclude -type fpředá do
find 5 parametrů a je ekvivalentní spuštění
find . '-mtime -2' '\( ! -iname "*ajax*" \)' -type fA tomu
find samozřejmě nerozumí.
Pokud chcete předat jednou proměnnou víc parametrů, musíte použít pole. Vyzkoušejte si to třeba na příkazu touch:
test1='abc def' test2=(ghj ijk) touch $test1 touch $test2První
touch vytvoří jeden soubor s názvem abc\ def. Druhý dostal jako parametr dvouprvkové pole, vytvoří tedy dva soubory, ghj a ijk.
Když použijete proměnné, je celá proměnná považovaná za jeden parametr.To je naprostá pitomost. 1) Dokumentace bashe: The order of expansions is: brace expansion, tilde expansion, parameter, variable and arithmetic expansion and command substitution (done in a left-to-right fashion), word splitting, and pathname expansion. 2) Praktický příklad:
x='-h -l -a' ls $x
zsh se chová přesně tak jak jsem popsal. bash se chová jak popisujete vy. Nenapadlo mne, že se v tomhle budou shelly lišit. Z té citované dokumentace to navíc neplyne, protože do x přiřazujete text v apostrofech, takže se to dá klidně chápat tak, že v proměnné bude mezera escapovaná. Ostatně
x='`pwd`' echo $xani bashi nevypíše aktuální adresář, ale vypíše text
`pwd`. Takže command substitution už v bashi na obsahu proměnné prováděno není.
set -xJelikož pathname expanse probíhá až po word splittingu, rozumné řešení je skutečně jen přes pole, jak už tu bylo napsáno:
exclude=('(' ! -iname '*sample*' ')')
find . $filter "${exclude[@]}" -type f
Využívá se magické vlastnosti konstrukce "${array[@]}", kterou shell neexpanduje na obsah pole jako jedno slovo, ale na samostatná slova pro každý prvek pole.
..... opravdu se to musí takhle ohackovat, vyzkoušeno a funguje...
Děkuji všem, kdož se snažili pomoct a doufám, že tato otázka pomůže i mnoha z vás
Milan
Tiskni
Sdílej: