Evropský parlament dnes přijal směrnici týkající se tzv. práva spotřebitele na opravu. Poslanci ji podpořili 584 hlasy (3 bylo proti a 14 se zdrželo hlasování). Směrnice ujasňuje povinnosti výrobců opravovat zboží a motivovat spotřebitele k tomu, aby si výrobky nechávali opravit a prodloužili tak jejich životnost.
Bylo oznámeno (cs) vydání Fedora Linuxu 40. Přehled novinek ve Fedora Workstation 40 a Fedora KDE 40 na stránkách Fedora Magazinu. Současně byl oznámen notebook Slimbook Fedora 2.
ČTK (Česká tisková kancelář) upozorňuje (X), že na jejím zpravodajském webu České noviny byly dnes dopoledne neznámým útočníkem umístěny dva smyšlené texty, které nepocházejí z její produkce. Jde o text s titulkem „BIS zabránila pokusu o atentát na nově zvoleného slovenského prezidenta Petra Pelligriniho“ a o údajné mimořádné prohlášení ministra Lipavského k témuž. Tyto dezinformace byly útočníky zveřejněny i s příslušnými notifikacemi v mobilní aplikaci Českých novin. ČTK ve svém zpravodajském servisu žádnou informaci v tomto znění nevydala.
Byla založena nadace Open Home Foundation zastřešující více než 240 projektů, standardů, ovladačů a knihoven (Home Assistant, ESPHome, Zigpy, Piper, Improv Wi-Fi, Wyoming, …) pro otevřenou chytrou domácnost s důrazem na soukromí, možnost výběru a udržitelnost.
Společnost Meta otevírá svůj operační systém Meta Horizon OS pro headsety pro virtuální a rozšířenou realitu. Vedle Meta Quest se bude používat i v připravovaných headsetech od Asusu a Lenova.
Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.
Byla vydána nová stabilní verze 3.5 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). Přehled novinek také na YouTube. Nově lze využívat cloud (audio.com). Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.
50 let operačního systému CP/M, článek na webu Computer History Museum věnovaný operačnímu systému CP/M. Gary Kildall z Digital Research jej vytvořil v roce 1974.
Byl zveřejněn program a spuštěna registrace na letošní konferenci Prague PostgreSQL Developer Day, která se koná 4. a 5. června. Na programu jsou 4 workshopy a 8 přednášek na různá témata o PostgreSQL, od konfigurace a zálohování po využití pro AI a vector search. Stejně jako v předchozích letech se konference koná v prostorách FIT ČVUT v Praze.
Po 48 letech Zilog končí s výrobou 8bitového mikroprocesoru Zilog Z80 (Z84C00 Z80). Mikroprocesor byl uveden na trh v červenci 1976. Poslední objednávky jsou přijímány do 14. června [pdf].
/usr/lib64/nagios/plugins/check_icinga2.sh /usr/share/monitoring-common-shell-library/functions.sh: line 1721: local: -n: invalid option local: usage: local [option] name[=value] ... /usr/share/monitoring-common-shell-library/functions.sh: line 1713: haystack[@]: unbound variabledotčené řádky vypadají takto:
in_array_re () { if [ $# -ne 2 ] || \ ! [[ "${1}" =~ ^[[:graph:]]+$ ]] || \ ! is_array "${1}"; then fail "Invalid parameters" return 1 fi local -n haystack="${1}" #local -a 'haystack=("${'"${1}"'[@]}")' for i in "${haystack[@]}"; do if [[ "${2}" =~ ${i} ]]; then return 0 fi done return 1 } readonly -f in_array_rekonkrétně to nerozumí této konstrukci:
local -n haystack="${1}"Nevěděli byste někdo kde je problém?
Řešení dotazu:
Neviem či to chápem správne, ale vychádza mi z toho, že "local -n haystack="${1}" umožňuje sa na ${1} odkazovať cez premennú haystack. To znamená, že tam, kde sa neskôr použije ${haystack}, by sa mohlo rovno použiť ${1}. Akurát takto je to čitateľnejšie, pretože to meno indikuje, že v prvom parametri je niečo v čom sa robí vyhľadávanie.local [option] [name[=value] ... | - ]
...
... The option can be any of the options accepted by declare ...declare [-aAfFgilnrtux] [-p] [name[=value] ...]
-n Give each name the nameref attribute, making it a name reference to another variable. That other variable is defined by the value of name. All references, assignments, and attribute modifications to name, except those using or changing the -n attribute itself, are performed on the variable referenced by name's value. The nameref attribute cannot be applied to array variables.
function myFunction { local -n givenList=$1 echo "${givenList[@]}" } itemList=("first" "second" "third") myFunction itemListZdar Max
The nameref attribute cannot be applied to array variables.
local -n haystack="${1}vyzera ako referencovanie obycajnej premennej, co je asi OK, ale dalej sa uz s haystack pracuje ako s polom -
${haystack[@]}
. A aj to zakomentovane definovanie haystack je definicia ako pole. Podla mna povodne bol haystack pole a potom niekto prepisal skript, ze haystack referencuje len $1, co nebude uplne fungovat.
/usr/share/monitoring-common-shell-library/functions.sh: line 218: CSL_USER_PREREQ[@]: unbound variable
Cccoooooooooožžžeeeeeeeeee???
Tohle nemůžeš myslet vážně. Ne, opravdu ne. Proč si nepřečteš manuálovou stránku, než odpovíš? Teď se na webu zbytečně povaluje další naprostý nesmysl.
-n Give each name the nameref attribute, making it a name reference to another variable. That other variable is defined by the value of name. All refer‐ ences, assignments, and attribute modifications to name, except those using or changing the -n attribute itself, are performed on the variable referenced by name's value. The nameref attribute cannot be applied to array variables.
Jasně, to vůbec nemá na funkci žádný vliv, že? Kromě zásadního. Ale koho dnes zásadní vliv zajímá…
Doporučuji ignorovat všechny ostatní odpovědi / většinu ostatních odpovědí. V tomto vlákně je opravdu nablito. To se nehodí. Především je potřeba nahlédnout do manuálové stránky:
-n Give each name the nameref attribute, making it a name reference to another variable. That other variable is defined by the value of name. All refer‐ ences, assignments, and attribute modifications to name, except those using or changing the -n attribute itself, are performed on the variable referenced by name's value. The nameref attribute cannot be applied to array variables.
Takže: -n
je v Bashi (u declare
a local
) něco jako poor man's pointer. Říká to, že proměnná ukazuje na jinou proměnnou, tedy že obsah té proměnné se má považovat za název jiné proměnné, jejíž hodnota se potom dosadí. Tak trochu je to ekvivalentní vykřičníku v expanzi, jenom pak žádný vykřičník není potřebný a přiřazení proměnné funguje oběma směry, jako u pointeru / reference. Tady je jednoduchý příklad pro ilustraci:
a=blabla declare -n b=a c=a echo $b # blabla echo ${!c} # blabla b=hovno echo $a # hovno
Jak to tedy zprovoznit ve starším Bashi? Inu, to je ošklivé. Protože c
ve výše zmíněné ukázce je kompatibilní se starým Bashem, jako lákavá možnost se jeví nahradit každý haystack
za "${!1}"
. Jenže to nefunguje. Bash prostě v tomto případě nepovoluje čísla / parametry.
Takže mi nezbývá než doporučit záměnu řádky local -n haystack="${1}"
za něco jako tohle:
eval 'local haystack="${1}"'
Ještě bych ale poznamenal, že problém nastane, pokud ten první argument je název pole. Pak je to mírně složitější. V takovém případě bych doporučoval (pro Bash 4.2) něco takového (tedy, když v $1
bude název pole):
prase() { local -r declare_command="$(declare -p "$1")" eval "${declare_command/#declare/local}" eval "local -ra array=(\$(echo \"\${"$1"[@]}\"))" # Tak. A pod touhle sračkou už je to normální pole: for idx in "${!array[@]}"; do echo "${idx} -> ${array["${idx}"]}" done } neboprasnice=(a b c d 9 8 7 6) prase neboprasnice
Jak zjistit, jestli název proměnné v argumentu ukazuje na pole? Inu, stačí se podívat, jestli declare -p názevproměnné
má mezi optiony -a
. Jak tohle rozparsovat, to už rád ponechám čtenáři za cvičení. Ale většinou není třeba cvičit, protože (nápověda!) k proměnné, která není pole, se dá v Bashi taky přistupovat jako k poli s jedním prvkem s indexem 0. Jo, a jestli to bude asociativní pole (declare -A ...
), tak to už ale fakt opravdu dávám čtenáři za cvičení. Už mě to nebaví.
Závěrem musím ještě znamenat a tak dlouho znamenat, až poznamenám, že na rozdíl od declare -n
neexistuje žádná alternativa pro starší Bash, která by udržovala referenci oběma směry a změny na referenci propagovala do původní proměnné. Jediná možnost, jak toho dosáznout, je proměnnou lokálně přejmenovat (jo, změnit hned první eval
ve funkci prase
), aby se pořád dalo přistupovat k té původní globální, a tu původní globální pak změnit / přiřadit. To bych ponechal čtenáři za bonusové cvičení se třemi hvězdičkami.
Hernajs, co takhle nepoužívat zastaralé fosilní systémy a ujistit se, že na daném systému je Bash 5.x? Would that be too extreme?
a='foo' b=a eval echo \${$b}
Nevypadá to, že by to podporovalo pole a/nebo lokální proměnné.
Často jsou v Bashi velé rozdíly mezi řešením a „řešením“.
https://netshadow.org/monitoring-plugins/check_icinga2 https://netshadow.org/monitoring-plugins/monitoring-common-shell-libraryDíky všem
Tiskni Sdílej: