Eric Lengyel dobrovolně uvolnil jako volné dílo svůj patentovaný algoritmus Slug. Algoritmus vykresluje text a vektorovou grafiku na GPU přímo z dat Bézierových křivek, aniž by využíval texturové mapy obsahující jakékoli předem vypočítané nebo uložené obrázky a počítá přesné pokrytí pro ostré a škálovatelné zobrazení písma, referenční ukázka implementace v HLSL shaderech je na GitHubu. Slug je volným dílem od 17. března letošního
… více »Sashiko (GitHub) je open source automatizovaný systém pro revizi kódu linuxového jádra. Monitoruje veřejné mailing listy a hodnotí navrhované změny pomocí umělé inteligence. Výpočetní zdroje a LLM tokeny poskytuje Google.
Cambalache, tj. RAD (rapid application development) nástroj pro GTK 4 a GTK 3, dospěl po pěti letech vývoje do verze 1.0. Instalovat jej lze i z Flathubu.
KiCad (Wikipedie), sada svobodných softwarových nástrojů pro počítačový návrh elektronických zařízení (EDA), byl vydán v nové major verzi 10.0.0 (𝕏). Přehled novinek v příspěvku na blogu.
Letošní Turingovou cenu (2025 ACM A.M. Turing Award, Nobelova cena informatiky) získali Charles H. Bennett a Gilles Brassard za základní přínosy do oboru kvantové informatiky, které převrátily pojetí bezpečné neprolomitelné komunikace a výpočetní techniky. Jejich protokol BB84 z roku 1984 umožnil fyzikálně zaručený bezpečný přenos šifrovacích klíčů, zatímco jejich práce o kvantové teleportaci položila teoretické základy pro budoucí kvantový internet. Jejich práce spojila fyziku s informatikou a ovlivnila celou generaci vědců.
Firefox 149 dostupný od 24. března přinese bezplatnou vestavěnou VPN s 50 GB přenesených dat měsíčně (s CZ a SK se zatím nepočítá) a zobrazení dvou webových stránek vedle sebe v jednom panelu (split view). Firefox Labs 149 umožní přidat poznámky k panelům (tab notes, videoukázka).
Byla vydána nová stabilní verze 7.9 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 146. Přehled novinek i s náhledy v příspěvku na blogu.
Dle plánu byla vydána Opera GX pro Linux. Ke stažení je .deb i .rpm. V plánu je flatpak. Opera GX je webový prohlížeč zaměřený na hráče počítačových her.
GNUnet (Wikipedie) byl vydán v nové major verzi 0.27.0. Jedná se o framework pro decentralizované peer-to-peer síťování, na kterém je postavena řada aplikací.
Byly publikovány informace (technické detaily) o bezpečnostním problému Snapu. Jedná se o CVE-2026-3888. Neprivilegovaný lokální uživatel může s využitím snap-confine a systemd-tmpfiles získat práva roota.
#!/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'