Svobodný a otevřený multiplatformní editor EPUB souborů Sigil (Wikipedie, GitHub) byl vydán ve verzi 2.5.0. Stejně tak doprovodný vizuální EPUB XHTML editor PageEdit (GitHub).
Na základě národního atribučního procesu vláda České republiky označila Čínskou lidovou republiku za zodpovědnou za škodlivou kybernetickou kampaň proti jedné z neutajovaných komunikačních sítí Ministerstva zahraničních věcí ČR. Tato škodlivá aktivita, která trvala od roku 2022 a zasáhla instituci zařazenou na seznam české kritické infrastruktury, byla provedena kyberšpionážní skupinou APT31, veřejně spojovanou se zpravodajskou službou Ministerstvo státní bezpečnosti (MSS).
Google Chrome 137 byl prohlášen za stabilní. Nejnovější stabilní verze 137.0.7151.55 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 11 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Byl vydán AlmaLinux OS 10 s kódovým názvem Purple Lion. Podrobnosti v poznámkách k vydání. Na rozdíl od Red Hat Enterprise Linuxu 10 nadále podporuje x86-64-v2.
Byl vydán Mozilla Firefox 139.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 139 je již k dispozici také na Flathubu a Snapcraftu.
Byly publikovány výsledky průzkumu mezi uživateli Blenderu uskutečněného v říjnu 2024. Zúčastnilo se více než 7000 uživatelů. Téměř 93 % z nich například používá uživatelské rozhraní v angličtině.
Lukáš Růžička v článku RamaLama aneb vyháníme lamy na vlastní louku na MojeFedora.cz představuje open source nástroj RamaLama umožňující spouštět jazykové modely v izolovaných OCI kontejnerech, a to bezpečně, bez potřeby mít root přístup k počítači, s podporou GPU či CPU a bez zbytečných obtížností kolem.
Byl vydán Sublime Text 4 Build 4200. Sublime Text (Wikipedie) je proprietární multiplatformní editor textových souborů a zdrojových kódů. Ke stažení a k vyzkoušení je zdarma. Pro další používání je nutná licence v ceně 99 dolarů. Spolu se Sublime Merge je cena 168 dolarů.
Multiplatformní open source voxelový herní engine Luanti byl vydán ve verzi 5.12.0. Podrobný přehled novinek v changelogu. Původně se jedná o Minecraftem inspirovaný Minetest v říjnu loňského roku přejmenovaný na Luanti.
Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 25.5. Přehled novinek v Changelogu.
/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: