Na stránkách Evropské komise, na portálu Podělte se o svůj názor, se lze do 3. února podělit o názor k iniciativě Evropské otevřené digitální ekosystémy řešící přístup EU k otevřenému softwaru.
Společnost Kagi stojící za stejnojmenným placeným vyhledávačem vydala (𝕏) alfa verzi linuxové verze (flatpak) svého proprietárního webového prohlížeče Orion.
Firma Bose se po tlaku uživatelů rozhodla, že otevře API svých chytrých reproduktorů SoundTouch, což umožní pokračovat v jejich používání i po plánovaném ukončení podpory v letošním roce. Pro ovládání také bude stále možné využívat oficiální aplikaci, ale už pouze lokálně bez cloudových služeb. Dokumentace API dostupná zde (soubor PDF).
Jiří Eischmann se v příspěvku na svém blogu rozepsal o open source AdGuard Home jako domácí ochraně nejen před reklamou. Adguard Home není plnohodnotným DNS resolverem, funguje jako DNS forwarder s možností filtrování. To znamená, že když přijme DNS dotaz, sám na něj neodpoví, ale přepošle ho na vybraný DNS server a odpovědi zpracovává a filtruje dle nastavených pravidel a následně posílá zpět klientům. Dá se tedy používat k blokování reklamy a škodlivých stránek a k rodičovské kontrole na úrovni DNS.
AI Claude Code od Anthropicu lépe rozumí frameworku Nette, tj. open source frameworku pro tvorbu webových aplikací v PHP. David Grudl napsal plugin Nette pro Claude Code.
Byla vydána prosincová aktualizace aneb nová verze 1.108 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.108 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Na lasvegaském veletrhu elektroniky CES byl předveden prototyp notebooku chlazeného pomocí plazmových aktuátorů (DBD). Ačkoliv se nejedná o první nápad svého druhu, nepochybně to je první ukázka praktického použití tohoto způsobu chlazení v běžné elektronice. Co činí plazmové chladící akční členy technologickou výzvou je především vysoká produkce jedovatého ozonu, tu se prý podařilo firmě YPlasma zredukovat dielektrickou
… více »Patchouli je open source implementace EMR grafického tabletu (polohovací zařízení). Projekt je hostován na GitLabu.
Český Nejvyšší soud potvrdil, že česká právní úprava plošného uchování dat o elektronické komunikaci porušuje právo Evropské unie. Pravomocným rozsudkem zamítl dovolání ministerstva průmyslu a obchodu. To se teď musí omluvit novináři Českého rozhlasu Janu Cibulkovi za zásah do práv na ochranu soukromí a osobních údajů. Ve sporu jde o povinnost provozovatelů sítí uchovávat údaje, ze kterých lze odvodit, kdo, s kým a odkud komunikoval.
Google bude vydávat zdrojové kódy Androidu pouze dvakrát ročně. Ve 2. a 4. čtvrtletí.
#!/bin/sh
f() {
echo value is $V
}
f
V=1 f
f
Pokud jej spustíme v bashi, třeba pomocí "bash ./demo.sh", tak dostaneme
value is value is 1 value iscož je tak nějak, co by člověk očekával. Pokud jej spustíme v dashi, dostaneme
value is value is 1 value is 1
Budiž, po troše hledání člověk nalezne, že POSIX chování nejspíš nespecifikuje, takže skript se na konkrétní chování nesmí spoléhat.
To nejlepší nakonec. Pokud máte /bin/sh jako bash a ne jako dash, je rozdíl v chování "sh demo.sh" a "bash demo.sh", přestože se pokaždé spouští bash.
EDIT: Link na relevantní diskuzi v mailing listu dashe.
Tiskni
Sdílej:
"If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well."
Zdar MaxKaždopádně, jaký smysl má zápis "V=1 f" kromě testování syntaxe různých interpretů?
Hodně často se to používá např. v konstrukcích typu
... | LC_COLLATE=C sort
Obecně v situaci, kdy potřebujete spustit konkrétní příkaz s určitou hodnotou určité proměnné, ale nechcete ji nastavovat (jako exportovanou) v environmentu shellu, okdud by ji zdědily i všechny ostatní příkazy.
To chování dashe (jestli se tak opravdu chová a nebyla to nějaká jiná chyba) je hodně nešťastné a obávám se, že to rozbije hodně skriptů.
Každopádně, jaký smysl má zápis "V=1 f" kromě testování syntaxe různých interpretů?Tenhle zápis mi přijde jako naprosto běžná věc, například
CC=/nekde/nejaky/cc make . Něbo máš na mysli specificky při používání shellových funkcí (ie. ne programů)? V takovém případě to je, pravda, asi trochu neobvyklé...
j,
na vetsinu poslednich veci se neprislo nahodou ale celkem dost usilovnou praci velmi dobre placenych lidi
a v tomto pripade se jedna ciste jen o lokalni definici promene pro konkretni volani funkce f bez zasahu do env..
takze bash se narozdil od dashe chova logicky
co je divneho na tom, ze si to kazdy shell implementuje po svemSmyslem konstrukce:
PROMĚNNÁ=hodnota nějaký-příkaz;je spustit
nějaký-příkaz s danou hodnotou proměnné prostředí – zatímco jiné/následující příkazy chci spouštět bez této proměnné resp. s její původní hodnotou – jinak bych totiž napsal:
PROMĚNNÁ=hodnota; nějaký-příkaz; nějaký-další-příkaz;
Mně tedy chování dashe vůbec logické nepřipadá, protože hlavně vůbec není konzistentní. V okamžiku, kdy se konstrukce
var=val cmd
chová diametrálně odlišně podle toho, jestli je cmd (externí) příkaz nebo funkce, stačí nahradit příkaz vlastním wrapperem (což je běžný postup) a skript se rozbije. Tohle prostě autoři dashe nedomysleli.
"funkce" (ono je to spíš makro)
Shellová funkce se ani zdaleka nechová jako makro.
podporují levý argument a jiné built-in programy argument na levé straně nepodporují
Tak tady se nechytám. Co myslíte termínem levý argument?
Já nevim, jestli bych chtěl měnit změnou parametru prostředí před funkcí chování všech programů použitých uvnitř wrapperu.
Já samozřejmě ano. Když to bude samostatný script, také tu proměnnou dostane do svého environmentu. A funkce je v podstatě takový "embedded script", tedy až na to, že defaultně sdílí environment se zbytkem scriptu.
nehledě na to, že to ani návratovou hodnotu nemá
Opravdu? Tak zkuste spustit tohle
#!/bin/bash
function starts_with_a()
{
if [ "${1#a}" = "$1" ]; then
return 1
else
return 0
fi
}
starts_with_a abc && echo "abc YES"
starts_with_a abc || echo "abc NO"
starts_with_a def && echo "def YES"
starts_with_a def || echo "def NO"
a vysvětlit, proč to vypíše
abc YES def NO
Samozřejmě to, co je uvedeno na levé straně příkazu/programu.
Uff… Tak říkat tomu argument by mne ani ve snu nenapadlo. To přece není žádný argument, ta konstrukce prostě znamená "spusť tenhle příkaz s těmito hodnotami těchto proměnných", nic víc a nic méně. S argumenty to nemá nic společného, příkaz nemá žádnou možnost, jak poznat, jestli jste použil tu jednořádkovou konstrukci nebo jste tu proměnnou prostě a jednoduše nastavil klasickým způsobem (jako exportovanou).
Dokonce -- což se tak často neví -- tam může být nastavení file-deskriptoru (přesměrování), který se ze zvyku a pro lepší čitelnost dává na pravou stranu až na konec.
Snad nechcete přesměrování také říkat argument? Zkuste se zamyslet např. nad tím, proč
wc file wc <file
mají rozdílný výstup (hlavně proč první vypíše jméno souboru a druhý ne).
Však jsem psal, že return vrací (spíš posílá) status do stderr. Já psal ale o návratové hodnotě, která jde dál ke zpracování -- nějaký řetězec. V shellu je to jen o přesměrování stdout. Samozřejmě s přivřením oka to můžeme také nazývat návratovou hodnotou, pokud nám nebude vadit, že ji vrací příkaz jako echo nebo printf.
Je mi líto, ale v tomhle odstavci není pravda skoro nic. Návratová hodnota nemá se stderr nic společného a u funkce funguje v podstatě stejně jako u externího příkazu a stejně se i zpracovává. Návratová hodnota je číslo, žádný řetězec, jak u funkce, tak u externího příkazu. Výstup (standard output) a chybový výstup (standard error) jsou něco úplně jiného.
ls -d [A-Z]*
V bashi vypise i soubory nezacinajici velkym pismenem. Pod zsh to ma ocekavany vysledek. Nevim zda je to zpusobeno locale nebo cim, ale ani nastaveni locale na LC_ALL=C to chovani nezmeni.
Works for me:
mike@unicorn:/tmp/a> ls -d [A-Z]* A b B c C d D mike@unicorn:/tmp/a> LC_ALL=C mike@unicorn:/tmp/a> ls -d [A-Z]* A B C D
[lyco@hubb test]$ LC_ALL=cs_CZ.utf8 [lyco@hubb test]$ ls * a A á Á b B c C č Č [lyco@hubb test]$ ls [A-C]* A á Á b B c C [lyco@hubb test]$ ls [A-Z]* A á Á b B c C č Č [lyco@hubb test]$ LC_ALL=C [lyco@hubb test]$ ls [A-C]* A B C [lyco@hubb test]$ [lyco@hubb test]$ LC_ALL=C ls [A-C]* A B C [lyco@hubb test]$ LC_ALL=cs_CZ.utf8 [lyco@hubb test]$ LC_ALL=C ls [A-C]* A B C b c ''$'\303\201' ''$'\303\241'