Byla vydána nová verze 18 integrovaného vývojového prostředí (IDE) Qt Creator. S podporou Development Containers. Podrobný přehled novinek v changelogu.
Cursor (Wikipedie) od společnosti Anysphere byl vydán ve verzi 2.0. Jedná se o multiplatformní proprietární editor kódů s podporou AI (vibe coding).
Google Chrome 142 byl prohlášen za stabilní. Nejnovější stabilní verze 142.0.7444.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 20 bezpečnostních chyb. Za nejvážnější z nich bylo vyplaceno 50 000 dolarů. Vylepšeny byly také nástroje pro vývojáře.
Pro moddery Minecraftu: Java edice Minecraftu bude bez obfuskace.
Národní identitní autorita, tedy NIA ID, MeG a eOP jsou nedostupné. Na nápravě se pracuje [𝕏].
Americký výrobce čipů Nvidia se stal první firmou na světě, jejíž tržní hodnota dosáhla pěti bilionů USD (104,5 bilionu Kč). Nvidia stojí v čele světového trhu s čipy pro umělou inteligenci (AI) a výrazně těží z prudkého růstu zájmu o tuto technologii. Nvidia již byla první firmou, která překonala hranici čtyř bilionů USD, a to letos v červenci.
Po Canonicalu a SUSE oznámil také Red Hat, že bude podporovat a distribuovat toolkit NVIDIA CUDA (Wikipedie).
TrueNAS (Wikipedie), tj. open source storage platforma postavená na Linuxu, byl vydán ve verzi 25.10 Goldeye. Přináší NVMe over Fabric (NVMe-oF) nebo OpenZFS 2.3.4.
Byla vydána OpenIndiana 2025.10. Unixový operační systém OpenIndiana (Wikipedie) vychází z OpenSolarisu (Wikipedie).
České základní a střední školy čelí alarmujícímu stavu kybernetické bezpečnosti. Až 89 % identifikovaných zranitelností v IT infrastruktuře vzdělávacích institucí dosahuje kritické úrovně, což znamená, že útočníci mohou vzdáleně převzít kontrolu nad klíčovými systémy. Školy navíc často provozují zastaralé technologie, i roky nechávají zařízení bez potřebných aktualizací softwaru a používají k nim pouze výchozí, všeobecně známá
… více »basename/dirname, test a read.Tyto dva příkazy slouží k získání konkrétní části cesty k souboru. Oběma příkazům se zadává kompletní cesta k souboru či adresáři. Příkaz basename slouží k výpisu samotného názvu souboru či adresáře, který získá ze zadané cesty, zatímco příkaz dirname vypíše název nadřazeného adresáře.
$ basename /tmp/soubor.txt soubor.txt $ dirname /tmp/soubor.txt /tmp
Toto se hodí v různých skriptech, které přímo pracují se soubory. V různých shellech lze tyto externí příkazy nahradit za (podstatně) rychlejší vestavěné funkce, například v Bashi lze použít toto:
$ cesta="/home/dave/file.ogg"
$ adresar="${cesta%/*}"
$ soubor="${cesta##*/}"
$ echo -e "cesta: $cesta\nadresar: $adresar\nsoubor: $soubor"
cesta: /home/dave/file.ogg
adresar: /home/dave
soubor: file.ogg
Ovšem zde je důležité podotknout, že chování těchto dvou metod není úplně stejné. Můžete si to zkusit například na tomto příkladu:
$ cesta="/tmp/xyz/"
$ basename "$cesta"
xyz
$ echo "${cesta##*/}
# nevypíše nic
Proč bashová metoda nevypíše nic? Protože ${cesta##*/} znamená odstranění části řetězce z proměnné $cesta od začátku až po poslední lomítko (včetně).
Příkaz basename má ještě jednu vlastnost. Zadáte-li jako druhý argument příponu, tak ji z názvu souboru odstraní. Tedy za předpokladu, že by to neznamenalo výpis prázdného řetězce a že byla daná přípona v názvu nalezena. Není-li daná přípona v názvu nalezena, není to považované za chybu.
$ basename "/tmp/velky_soubor.tar.xz" .xz velky_soubor.tar
Příkaz test slouží k vyhodnocování různých výrazů a tvrzení. Použijete-li příkaz správně, tak vždy pouze vrátí návratovou hodnotu 0, nebo 1 jako signalizaci, že tvrzení platí, nebo neplatí, a nic nevypíše.
test dovede pracovat se soubory a adresáři. Umí ověřit, zda je soubor či adresář zapisovatelný (přepínač -w), spustitelný (-x), zda lze číst (-r) či zda vůbec existuje (-e). Dále umí zjistit, zda je soubor obyčejný soubor (-f), blokové zařízení (-b), znakové zařízení (-c), symbolický odkaz (-h nebo -L), pojmenovaná roura FIFO (-p), socket (-S) či adresář (-d).
# ověřuje, zda cesta „/“ ukazuje na adresář; # vrátí 0 (pravda), protože kořenový adresář existuje vždy test -d / # ověřuje, zda existuje soubor /tmp/xyz test -e /tmp/xyz
Pomocí test lze také zkoumat řetězce znaků.
# pravda, pokud je řetězec $X nenulový test "$X" # pravda, pokud jsou řetězce $A a $B stejné test "$A" = "$B" # pravda, pokud jsou řetězce navzájem různé test "$B" != "$C" # pravda, pokud je řetězec nulové délky; # toto vrátí 0 test -z ""
Dále lze porovnávat celá čísla. Je možné použít operátory:
# pravda, 150 je menší nebo rovno 150 test 150 -le 150 # nepravda, 100 = 100 test 100 -ne 100
Výrazy lze kombinovat pomocí přepínačů -a (logický AND, tedy „a zároveň“) nebo -o (logický OR, „nebo“). Dále je lze negovat přidáním vykřičníku před výraz. Můžeme také ovlivňovat prioritu vyhodnocování výrazů pomocí závorek.
# vrátí 1, protože minimálně druhý výraz neplatí (s -a musí platit oba) test \( -w /tmp \) -a \( 100 -eq 101 \) # pokud je adresář /tmp zapisovatelný, vrátí 0, protože platí alespoň jeden výraz test \( -w /tmp \) -o \( 100 -eq 101 \) # pravda, pokud soubor není zapisovatelný test ! -w "soubor"
V praxi se test používá v shellových skriptech, nejčastěji v kombinaci s podmínkou if. Také se často místo test píše pouze hranatá závorka [, přičemž je to totéž, ale takto zapsaný příkaz je nutné ukončit opačnou hranatou závorkou ].
# toto: test -x skript.sh # je totéž jako toto: [ -x skript.sh ]
Předvedeme si ukázkové použití v Bashi. Píšeme funkci my_mkdir, které zadáte název adresáře a ona jej vytvoří, pokud neexistuje. Ovšem nejdříve ověří, zda již neexistuje soubor či adresář stejného názvu a zařídí se podle toho (vypíše patřičnou informaci). Pomineme, že taková funkce nemá valný význam, protože mkdir podobné kontroly dělá sám.
my_mkdir() {
# pokud soubor či adresář s tímto názvem již existuje
if [ -e "$1" ]; then
# pokud adresář s tímto názvem již existuje
if [ -d "$1" ]; then
echo "Adresář s tímto názvem již existuje."
return 0
else
echo "Již existuje soubor se stejným názvem." >&2
return 1
fi
else
# vytvoříme adresář, protože soubor ani adresář s daným názvem neexistuje
if mkdir -p "$1"; then
echo "Adresář byl úspěšně vytvořen."
return 0
else
echo "Adresář se nepodařilo vytvořit." >&2
return 1
fi
fi
}
read je šikovný nástroj, který slouží k načtení jednoho řádku ze standardního vstupu do dané proměnné (či více proměnných).
Když vyžadujeme od uživatele nějaký vstup za běhu programu, můžeme read použít následovně:
echo -n "Jak se jmenuješ? "
read NAME
echo "Právě jsi mi prozradil, že se jmenuješ ${NAME}."
read má jediný přepínač, a sice -r, který slouží k nastavení toho, jak se má nakládat s výskytem znaku „\“ (zpětné lomítko). Bez něj je považován za escapující znak, přičemž s ním je brán doslova jako znak „\“.
Často se ve skriptech používá ke zpracování textového souboru řádek po řádku, pomocí cyklu while. Následuje ukázka v Bashi, která očísluje řádky daného souboru.
x="$IFS" IFS="" n=0 while read -r line; do echo "$((++n)) $line" done < soubor.txt IFS="$x"
Je možné načítat i do více proměnných najednou:
$ read a b acko becko $ echo $b :: $a becko :: acko
Znak, podle kterého se daný řetězec rozdělí na několik částí, je dán proměnnou IFS, jak je naznačeno výše. Výchozí hodnota této proměnné jsou speciální znaky tab, mezera a nový řádek. Pokud je proměnná IFS nastavená na prázdnou hodnotu (pomocí IFS=""), k žádnému rozdělení nedojde.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
cat neco | while read line; ...
<neco while read line; ...
<(grep foo soubor.txt) což spojuje oboje výhody do jednoho. Ale to jen doplňuji, nic proti cat sem | tam.
sh, bash, zsh, csh, tcsh, máte nějaké podezření že to někde nefunguje?
bashi a v dashi (co jsem teď vyzkoušel).
Podle posixové gramatiky navíc
<neco while x
znamená spuštění příkazu "while" (existuje-li někde na disku) s parametrem x a vstupem přesměrovaným z neco.
-p.
read -p "Jak se jmenuješ? " NAME
read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...]
(bash)
lennycz@hugo:~$ IFS=x lennycz@hugo:~$ read a b aaaxbbbxcccxddd lennycz@hugo:~$ echo $a aaa lennycz@hugo:~$ echo $b bbb ccc ddd lennycz@hugo:~$Čekal bych jedno z tohoto:
$a bude aaa a $b bude bbb, zbytek se zahodí$a bude aaa a $b bude pole složené z bbb, ccc a ddd, pak by se ale výpis měl objevit jako bbbxcccxddd, protože $IFS je nastaveno na x
)
Jinak samozřejmě díky za skvělý seriál :D...
help jsem nevěděl.