Nadace FreeBSD Foundation před týdnem oznámila projekt Laptop Integration Testing. Vyzvala dobrovolníky, aby pomocí nástroje otestovali podporu FreeBSD na svých zařízeních a výsledky odeslali vývojářům. Vznikla stránka Nejlepší notebooky pro FreeBSD.
Na začátku srpna vstoupí v účinnost nová evropská pravidla transparentnosti pro umělou inteligenci (AI). Zavádějí povinnost jakýkoli AI obsah označit, informovat o takzvaných deepfakes a upozornit uživatele, že komunikuje s umělou inteligencí. Cílem opatření je omezit šíření manipulativního či klamavého obsahu, zvýšit důvěru v digitální prostředí a chránit uživatele.
Connor Byrne z USA používal pro přihlašování na svůj iPhone 13 s iOS 18 heslo obsahující háček. Po aktualizaci na iOS 26.4 se už ale do telefonu nepřihlásí. Při přihlašování nelze tento háček zadat. Apple jej prostě odstranil [The Register].
Linus Torvalds vydal jádro Linux 7.0. Podrobný výčet změn je ke zhlédnutí na stránce Kernel Newbies, stručné výběry v LWN (část první, druhá).
Na čem aktuálně pracují vývojáři GNOME? Pravidelný přehled novinek v Týden v GNOME. Vypíchnout lze novou verzi 2026.1 přehrávače hudby Amberol (Flathub).
Byla vydána verze 12.0 s kódovým jménem Ecne linuxové distribuce Trisquel GNU/Linux. Založena je na Ubuntu 24.04 LTS a podporována bude do roku 2029. Trisquel patří mezi svobodné distribuce doporučované Nadací pro svobodný software (FSF).
Open-source citační manažer Zotero (Wikipedie, GitHub) byl vydán v nové major verzi 9. Přehled novinek v příspěvku na blogu.
Libre Graphics Meeting 2026, tj. čtyřdenní konference a setkání vývojářů a uživatelů svobodných a otevřených grafických softwarů, proběhne od 22. do 25. dubna v Norimberku. Dění lze sledovat na Mastodonu.
Vývojář Alexandre Gomes Gaigalas na GitHubu zveřejnil c89cc.sh, parser a kompilátor jazyka C89 napsaný v pouhém jediném skriptu o přibližně 8000 řádcích čistého bashe (bez dalších externích závislostí), který generuje ELF64 binárky pro x86-64. Jedná se o velmi jednoduchý kompilátor, který nepodporuje direktivy #include a dokonce ani funkci printf (lze použít puts), všechny dostupné deklarace lze nalézt v proměnné _BUILTIN_LIBC na konci skriptu. Skript je volně dostupný pod ISC licencí.
Francouzská vláda oznámila, že v rámci strategie 'digitální suverenity' zahájí 'přechod od systému Windows k počítačům s operačním systémem Linux' (sa sortie de Windows au profit de postes sous système d'exploitation Linux). DINUM (meziresortní ředitelství pro digitální technologie) požádalo ministerstva, aby do podzimu 2026 vypracovaly konkrétní plány nasazení Linuxu. Francie již dříve migrovala části státní správy na otevřená řešení.
Dobrý den,
potřeboval bych poradit jak zjednodušit násl. úlohu tak, aby pro každou hodnotu z dvojice $prvni a $druhy nemusel vypisovat vlastní for pro všechny indexy.
prvni=(`cat soubor1`)
druhy=(`cat soubor2`)
for ikx in $( seq ${prvni[0]} )
do 'třeba wget' "${ikx}${druhy[0]}"
done
$prvni a $druhy mají stejný počet hodnot, $prvni je cele kladné číslo a $druhy je text.
Měl jsem dojem, že by šlo využít toho, že hodnoty indexu jsou pro jednotlivé cykly for stejné, ale to mi přišlo jako speciální případ a zatím ani nevím jak na to.
S načítanými soubory (soubor1 a soubor2) mohu volně manipulovat a případně je přizpůsobit.
Předem všem děkuji!
jsk
#!/bin/bash
#vstup
IN1="kuk baf bum"
IN2="KUK BAF BUM"
#priprava pole
saveIFS=$IFS
IFS=" "
ARR1=( $IN1 )
ARR2=( $IN2 )
IFS=$saveIFS
#pocet prvku
CNT=${#ARR1[&]}
#kontrola prvku v obou polich
if [ ${CNT} -ne ${#ARR2[&]} ]; then
echo "Error: cnt1 != cnt2"
exit 3
fi
#zpracovani
for (( i=0; i<${CNT}; i++ )); do
echo "${ARR1[$i]} - ${ARR2[$i]} "
done
exit 0
Pro oddělovač řádků místo mezery:
IFS=" "
${#ARR1[*]}
nebo případně
${#ARR1[@]}
#!/bin/bash
#vstup
IN1="kuk baf bum"
IN2="KUK BAF BUM"
#priprava pole
saveIFS=$IFS
IFS=" "
ARR1=( $IN1 )
ARR2=( $IN2 )
IFS=$saveIFS
#pocet prvku
CNT=${#ARR1[@]}
#kontrola prvku v obou polich
if [ ${CNT} -ne ${#ARR2[@]} ]; then
echo "Error: cnt1 != cnt2"
exit 3
fi
#zpracovani
for (( i=0; i<${CNT}; i++ )); do
echo "${ARR1[$i]} - ${ARR2[$i]} "
done
exit 0
Zdravim,
ja tu mam tiez jedno riesenie a ci idealne, tak to zalezi na okolnostiach:
#! /bin/bash
mapfile -t PRVNI <./soubor1
mapfile -t DRUHY <./soubor2
while [[ -n "${PRVNI[0]}" && ${#PRVNI[@]} -eq ${#DRUHY[@]} ]]
do
echo "Aktualna dvojica: ${PRVNI[0]} - ${DRUHY[0]}"
unset PRVNI[0]
PRVNI=( ${PRVNI[@]} )
unset DRUHY[0]
DRUHY=( ${DRUHY[@]} )
done
Vyhody: Aj napriek nerovnakemu poctu clenov v jednom ci druhom subore,f popari, co sa da a az ked nenajde dvojicu, skonci. Co je zaroven jediny mozny koniec.
Nevyhody: Polia budu na konci cyklu prazdne a teda pri voli dalsieho pouzitia by bolo znova nutne nacitat zo suboru (velmi zle :)) . Toto sa da obist za cenu vytvorenia docasnych poli. Pre kazde jedno povodne vytvorit jedno docasne priamo vo funkcii. Pole bude platne len v ramci funkcie. PRVNI_TMP=( ${PRVNI[@]} )
#! /bin/bash
Prirad()
{
declare -a PRVNI_TMP=( ${PRVNI[@]} )
declare -a DRUHY_TMP=( ${DRUHY[@]} )
while [[ -n "${PRVNI_TMP[0]}" && ${#PRVNI_TMP[@]} -eq ${#DRUHY_TMP[@]} ]]
do
echo "Aktualna dvojica: ${PRVNI_TMP[0]} - ${DRUHY_TMP[0]}"
unset PRVNI_TMP[0]
PRVNI_TMP=( ${PRVNI_TMP[@]} )
unset DRUHY_TMP[0]
DRUHY_TMP=( ${DRUHY_TMP[@]} )
done
}
mapfile -t PRVNI <./soubor1
mapfile -t DRUHY <./soubor2
Prirad
Nevravim, ze idealne, ale riesenie to je.
Oprava:
Cyklus ma byt nasledovne:
while [[ -n "${PRVNI[0]}" && -n "${DRUHY[0]}" ]]
aby to malo tu mnou spominanu "vyhodu". Je nutne vediet, ci tie dva prvky z prveho a druheho pola maju nejaku spojitost (meno a priezvisko a pod.).
Zdravím,
pokusím se vysvětlit souvislost prvků mám-li např.
S1=(1 2 3 4 7 8 9 10 11)
a
S2=(100 83 150 230 11 18 22 55 99)
pro S1[0] se provede činnost 100×
Asi jsem to původně popsal dost neobratně 
jsk
#!/bin/bash
#vstup
IN1="kuk baf bum klof nic nic2"
IN2="3 1 7 2 pepa"
#priprava pole
saveIFS=$IFS
IFS=" "
ARR1=( $IN1 )
ARR2=( $IN2 )
IFS=$saveIFS
#pocet prvku
CNT1=${#ARR1[@]}
CNT2=${#ARR2[@]}
if [ ${CNT2} -lt ${CNT1} ]; then
MAX=${CNT2}
else
MAX=${CNT1}
fi
#zpracovani
for (( i=0; i<${MAX}; i++ )); do
NUM_MAX=$(( ${ARR2[$i]} + 0 ))
for (( j=0; j<${NUM_MAX}; j++ )); do
echo "${ARR1[$i]} - $(($j+1))"
done
done
exit 0
Tiez si myslim. ;(
Zdravím a děkuji všem,
nejsem si zcela jistý, že jsem problém správně popsal, pro hodnotu na pozici v $soubor1 potřebuji, aby proběhlo zpracování pro všechny hodnoty v rozsahu od 1 až po hodnotu stejné pozice v soubor2, takže na jeden průchod prvním for potřebuji více průchodů ve druhém for.
Měl jsem na mysli jako něco viz. níže, ale to mi nepokryje v druhém cyklu všechny případy, prostě mi to nepodrží zet. 20 = počet řádků.
prvni=(`cat soubor1`)
druhy=(`cat soubor2`)
then for zet in ( 1 2 ... 20} )
do for ikx in $( seq ${prvni[$zet]} ) ; do 'třeba wget' "neco${ikx}a_neco_jineho${druhy[$zet]}" ; done
done
Dostal jsem se k domácímu kompu teprve teď, takže jsem se možná ne všechny hned reakce pochopil správně, používám BASH nárazově a moc toho zatím neumím.
jsk
#!/bin/bash
#vstup
IN1="kuk baf bum bac snup nic"
IN2="KUK BAF BUM BAC SNUP"
#priprava pole
saveIFS=$IFS
IFS=" "
ARR1=( $IN1 )
ARR2=( $IN2 )
IFS=$saveIFS
#pocet prvku
CNT1=${#ARR1[@]}
CNT2=${#ARR2[@]}
#zpracovani
for (( i=0; i<${CNT1}; i++ )); do
if [ $i -lt ${CNT2} ]; then
for (( j=0; jlt;=i; j++ )); do
echo "${ARR1[$i]} - ${ARR2[$j]}"
done
fi
done
exit 0
Díky,
asi to není úplně snadné porozumět tomu co jsem napsal :(, snažil jsem se to popsat obecně, abych se nedobral k řešení postaveném na něčem zcela specifickém a mimochodem jsem to v pův. zadání napsal špatně, na vstupu jsou čísla.
Nerozumím úplně řádkům 19 a 20 hlavně -lt a jlt;=i mi není jasné, IFS jsem zřejmě již pochopil, ale vypadá to, že je to ono, pro každé i se provede j průchodů a i i j mohu vložit jako proměnou do url které dávám wget-u, zde echo.
Konkrétní test provedu až zítra, teď už musím končit, ještě jednou děkuji!!
Zdraví jsk
if [ $i -lt ${CNT2} ]; then
#dělej toto pokud $i je menší (l-ower t-hen) než $CNT
#viz man test
fi
No k 20tému řádku, nevím jak to dneska dělám ale již podruhé v této diskuzi při záměně znaků za html entity to nějak sprasím.
#!/bin/bash
#vstup
IN1="kuk baf bum bac snup nic"
IN2="KUK BAF BUM BAC SNUP"
#priprava pole
saveIFS=$IFS
IFS=" "
ARR1=( $IN1 )
ARR2=( $IN2 )
IFS=$saveIFS
#pocet prvku
CNT1=${#ARR1[@]}
CNT2=${#ARR2[@]}
#zpracovani
for (( i=0; i<${CNT1}; i++ )); do
if [ $i -lt ${CNT2} ]; then
for (( j=0; j<=$i; j++ )); do
echo "${ARR1[$i]} - ${ARR2[$j]}"
done
fi
done
exit 0
Vlastni for může být realizovan i takto, přijde na to co se má stát když nemají pole stejný počet prvků.
#zpracovani
for (( i=0; i<${CNT1}; i++ )); do
if [ $i -lt ${CNT2} ]; then
k=$i
else
k=$((${CNT2} - 1))
fi
for (( j=0; j<=$k; j++ )); do
echo "${ARR1[$i]} - ${ARR2[$j]}"
done
done
Zdravim,
19. riadok : -lt , -gt , -le, -ge, -ne, -eq : su pre porovnavanie celociselnych hodnot (integer)
20. riadok : Tam je preklep, spravne by mal byt takto zrejme: for (( j=0; j<=${i}; j++ )); do
Tiskni
Sdílej: