Byl vydán Mozilla Firefox 143.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Nově se Firefox při ukončování anonymního režimu zeptá, zda chcete smazat stažené soubory. Dialog pro povolení přístupu ke kameře zobrazuje náhled. Obzvláště užitečné při přepínání mezi více kamerami. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 143 bude brzy k dispozici také na Flathubu a Snapcraftu.
Byla vydána betaverze Fedora Linuxu 43 (ChangeSet), tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 21. října.
Multiplatformní emulátor terminálu Ghostty byl vydán ve verzi 1.2 (𝕏, Mastodon). Přehled novinek, vylepšení a nových efektů v poznámkách k vydání.
Byla vydána nová verze 4.5 (𝕏, Bluesky, Mastodon) multiplatformního open source herního enginu Godot (Wikipedie, GitHub). Přehled novinek i s náhledy v příspěvku na blogu.
Byla vydána verze 3.0 (Mastodon) nástroje pro záznam a sdílení terminálových sezení asciinema (GitHub). S novou verzí formátu záznamu asciicast v3, podporou live streamingu a především kompletním přepisem z Pythonu do Rustu.
Canonical oznámil, že bude podporovat a distribuovat toolkit NVIDIA CUDA (Wikipedie) v Ubuntu.
Tržní hodnota americké společnosti Alphabet, která je majitelem internetového vyhledávače Google, dnes poprvé překonala hranici tří bilionů dolarů (62,1 bilionu Kč). Alphabet se připojil k malé skupině společností, které tuto hranici pokořily. Jsou mezi nimi zatím americké firmy Nvidia, Microsoft a Apple.
Spojené státy a Čína dosáhly dohody ohledně pokračování populární čínské platformy pro sdílení krátkých videí TikTok v USA. V příspěvku na síti Truth Social to dnes naznačil americký prezident Donald Trump. Dosažení rámcové dohody o TikToku vzápětí oznámil americký ministr financí Scott Bessent, který v Madridu jedná s čínskými představiteli o vzájemných obchodních vztazích mezi USA a Čínou. Bessentova slova později potvrdila také čínská strana.
MKVToolNix, tj. sada nástrojů pro práci s formátem (medialnym kontajnerom) Matroska, byl vydán ve verzi 95.0. Podpora přehrávání formátu Matroska míří do Firefoxu [Bug 1422891, Technický popis]. Přehrávání lze již testovat ve Firefoxu Nightly.
Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 211. sraz, který proběhne v pátek 19. září od 18:00 ve Studentském klubu U Kachničky na Fakultě informačních technologií Vysokého učení technického na adrese Božetěchova 2/1. Na srazu proběhne přednáška Jiřího Eischmanna o nové verzi prostředí GNOME 49. Nemáte-li možnost se zúčastnit osobně, přednáškový blok bude opět streamován živě na server VHSky.cz a následně i zpřístupněn záznam.
#!/bin/sh f() { echo value is $V } f V=1 f fPokud 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'