abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 00:55 | Pozvánky

    Začal semestr, začal i podzim a kromě hub rostou jako po dešti i veřejné dílny v Praze. Nedávno strahováci referovali o hackerspacu Bordel, nyní se otevřela dílna Dejvice Lab jen kousek od ČVUT. Na blížící Virtuální Bastlírně tak uslyšíte nejen report z návštěvy dílny HWLab, ale i řadu novinek, událostí a úsměvných momentů, které se za poslední měsíc ve světě techniky, ale i vědy udály. Připojte se tedy již v úterý 13.10. od 20:00 a zapojte se do

    … více »
    bkralik | Komentářů: 0
    včera 11:33 | Nová verze

    Byl vydán LineageOS 24 (Mastodon). LineageOS (Wikipedie) je svobodný operační systém pro chytré telefony, tablety a set-top boxy založený na Androidu. Jedná se o nástupce CyanogenModu. LineageOS 24 je založený na Androidu 17.

    Ladislav Hagara | Komentářů: 0
    včera 03:55 | IT novinky

    Společnost Valve publikovala na svém GitLabu nákresy a schémata zapojení headsetu Steam Frame. Pro nekomerční účely.

    Ladislav Hagara | Komentářů: 1
    10.10. 23:11 | Bezpečnostní upozornění

    Soutěž Pwn2Own Ireland 2026 skončila 9. října. Bezpečnostní výzkumníci získali celkem 1 262 000 dolarů na odměnách. Během soutěže bylo předvedeno zneužití 98 zero-day zranitelností. Testování zahrnovalo různé kategorie zařízení a software. Výzkumníci předváděli prakticky fungující útoky podle pravidel soutěže. Výsledky následně slouží výrobcům při přípravě oprav. Mezi pokořenými jsou: Samsung Galaxy S26, OpenAI Codex, Oracle Autonomous AI Database, Google Pixel 10, u iPhone 17 neuspěli.

    vencour | Komentářů: 0
    9.10. 22:44 | Nová verze

    Programovací jazyk Python byl vydán v nové verzi 3.15.0. Podrobný přehled novinek v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 19
    9.10. 22:33 | Zajímavý projekt

    BIGWORDS.PAGE je open-source webová aplikace, která po otevření odkazu v prohlížeči vykreslí přes celou obrazovku jednoduché informační sdělení. Zpráva i její nastavení jsou uložené v části URL za znakem #, například odkaz https://bigwords.page/#abclinuxu zobrazí jako velký bílý nápis 'abclinuxu' na černém pozadí. Obsah odkazu lze upravovat i vestavěným editorem, ten umožňuje nastavovat formátování a vizuální efekty textu, časovače, QR kódy a obrázky. Zdrojový kód je dostupný pod licencí MIT na GitHubu.

    ❗Červivý Hřib krade❗ | Komentářů: 9
    9.10. 11:55 | Upozornění

    V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."

    Ladislav Hagara | Komentářů: 14
    9.10. 09:55 | IT novinky

    Vláda Spojených států se rozhodla vyřadit americkou softwarovou společnost Microsoft a několik dalších velkých technologických podniků z programu, který umožňuje kvalifikovaným zahraničním pracovníkům získat povolení k trvalému pobytu. Oznámila to včera administrativa amerického prezidenta Donalda Trumpa. Opatření zdůvodnila rozsáhlým zneužíváním programu, který je dlouhodobě terčem kritiky ze strany Trumpových příznivců, neboť prý znevýhodňuje americké pracovníky.

    Ladislav Hagara | Komentářů: 12
    9.10. 09:44 | IT novinky

    Datové centrum největší ruské technologické společnosti Jandex v Rjazaňské oblasti se stalo cílem dronového útoku a zastavilo provoz. Jandexu se někdy přezdívá „ruský Google“. Provozuje nejoblíbenější internetový vyhledávač v Rusku nebo aplikace pro objednávky jídla a taxi. Využívají jej desítky milionů lidí v rusky mluvících zemích.

    Ladislav Hagara | Komentářů: 13
    9.10. 09:33 | Nová verze

    Francouzská společnost Mistral AI představila Mistral Large 4 (interně přezdívaný 'le Chonk', volně přeloženo 'pořádný macek'), 'open-weight multimodální hybridní instruct-and-reasoning model s architekturou granulárního MoE, nativně podporující více jak 160 jazyků'. Model má přes jeden bilión parametrů, z nichž při práci využívá 49 miliard, kontextové okno o délce milion tokenů a obrazový enkodér o 1,6 miliardách parametrů.

    … více »
    ❗Červivý Hřib krade❗ | Komentářů: 2
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2832 hlasů
     Komentářů: 32, poslední včera 17:02
    Rozcestník

    Dotaz: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46

    12.6.2019 21:50 majales | skóre: 30 | blog: Majales
    bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Přečteno: 739×
    Ahoj, řeším problém s checkem který potřebujuje ke své funkci skript functions.sh

    v Ubuntu 16 LTS mi na bashi verze 4.3.48 funguje bezvadně, ovšem na Centos 7 s bashem verze 4.2.46 nefunguje..
    /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 variable
    dotč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_re
    
    konkrétně to nerozumí této konstrukci:

    local -n haystack="${1}"
    Nevěděli byste někdo kde je problém?

    Řešení dotazu:


    Odpovědi

    12.6.2019 22:14 debian+
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Preco vlastne pouzivas parameter -n?
    12.6.2019 22:21 majales | skóre: 30 | blog: Majales
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Nepsal jsem to.. jen to chci použít..
    13.6.2019 09:54 majales | skóre: 30 | blog: Majales
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Věděl by někdo jak přepsat tu konstrukci pro Bash 4.2? Díval jsem se, ale pro Centos 7 prostě není bash verze 4.3.
    13.6.2019 10:25 rastos | skóre: 63 | blog: rastos
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Na Slackware-i mi man bash (4.4.23) píše:

    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.

    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.
    Max avatar 13.6.2019 10:28 Max | skóre: 73 | blog: Max_Devaine
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Taktéž jsem něco podobného dohledal "Named reference to another variable (local -n) only supported with Bash 4.3.x or above."
    Zdar Max
    Měl jsem sen ... :(
    Max avatar 13.6.2019 10:32 Max | skóre: 73 | blog: Max_Devaine
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    A ještě dodám jednoduchý příklad použití :
    function myFunction {
    
        local -n givenList=$1
        echo "${givenList[@]}"
    }
    
    itemList=("first" "second" "third")
    myFunction itemList
    
    Zdar Max
    Měl jsem sen ... :(
    13.6.2019 14:52 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    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.
    If you hold a Unix shell up to your ear, you can you hear the C.
    Max avatar 13.6.2019 10:23 Max | skóre: 73 | blog: Max_Devaine
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    "local" je příkaz pro definici proměnný uvnitř fce. Nic víc, nic míň. Odstraň parametr "-n" (neviděl jsem ho stejně nikdy používat) a nemělo by to mít na žádnou fci skriptu vliv.
    Zdar Max
    Měl jsem sen ... :(
    Max avatar 13.6.2019 10:31 Max | skóre: 73 | blog: Max_Devaine
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Takže beru zpět, nebude to nejspíš fungovat.
    Zdar Max
    Měl jsem sen ... :(
    13.6.2019 11:06 majales | skóre: 30 | blog: Majales
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Díky. Tak to zabralo.. bohužel ten skript má kompatibility check na Bash 4.3, i když jsem ho upravil tak končím na
    /usr/share/monitoring-common-shell-library/functions.sh: line 218: CSL_USER_PREREQ[@]: unbound variable
    Max avatar 13.6.2019 11:42 Max | skóre: 73 | blog: Max_Devaine
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Zabralo to v tom smyslu, že ti to chybu neháže, ale myslím si, že ti ta proměnná bude vracet špatný hodnoty a stejně ti to nebude fungovat.
    Pokud chceš, aby to někde zkouknul, tak sem budeš muset hodit celý skript.
    Zdar Max
    Měl jsem sen ... :(
    14.6.2019 02:52 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46

    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á…

    Max avatar 14.6.2019 09:45 Max | skóre: 73 | blog: Max_Devaine
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Prosím, čti pozorněji, ano? Jasně jsem se vzápětí opravil a řekl, že to fungovat nebude.
    Zdar Max
    Měl jsem sen ... :(
    k3dAR avatar 14.6.2019 15:02 k3dAR | skóre: 63
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    to neslo, alkohol narusuje pozornost ;-)
    porad nemam telo, ale uz mam hlavu... nobody
    14.6.2019 03:05 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46

    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í. :-D 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?

    14.6.2019 08:36 NN
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Andeji v klidu prosim. Neco podobneho jsem kdysi davno resil pres eval:
    a='foo'
    b=a
    
    eval echo \${$b}
    
    15.6.2019 04:17 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46

    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“.

    Řešení 1× (majales (tazatel))
    14.6.2019 11:38 FE
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Nepomohlo by https://www.ramoonus.nl/2016/03/18/bash-4-4-installation-linux/ ?
    14.6.2019 13:24 majales | skóre: 30 | blog: Majales
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    No já bych tam nerad něco doprasil.. je to produkční monitorovací stroj.. jako jediný na Centos 7, jinak všude Ubuntu 16 nebo 18.
    14.6.2019 14:05 GeorgeWH | skóre: 42
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Nainstaluj to do /opt (alebo kde chces) a len uprav hlavicku toho skriptu.
    17.6.2019 10:08 majales | skóre: 30 | blog: Majales
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Tak se povedlo.. bash 4.4 ve /usr/local/bin/bash .. skript funguje... mimochodem jedná se o tento a knihovnu functions:
    https://netshadow.org/monitoring-plugins/check_icinga2 
    https://netshadow.org/monitoring-plugins/monitoring-common-shell-library
    
    Díky všem
    k3dAR avatar 17.6.2019 11:00 k3dAR | skóre: 63
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Pokud si nechtel rozhodit system, tak NEdavej do /usr/local/bin, protoze tak se ted veskere volani "bash" (bez urcene cesty) bude volat ten pridanej 4.4... aspon ho prejmenuj na bash44 a v skriptu co nesel mu zmen hlavicku
    porad nemam telo, ale uz mam hlavu... nobody
    17.6.2019 11:07 debian+
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    Neriadi sa sa volanie programov podla postupnosti v $PATH?
    k3dAR avatar 17.6.2019 12:59 k3dAR | skóre: 63
    Rozbalit Rozbalit vše Re: bash skript jde ve verzi bash 4.3.48 nefunguje v 4.2.46
    ridi a /usr/local/bin a /usr/local/sbin je prvni ;-) je to protoze /usr/local slouzi k tomu aby se dalo lokalne nahradit to co mas jinak z balicku... a urcite bych nemenil PATH jako "reseni" ale jak bylo receno, bud dat jinou verzi do /opt/cokoliv/bash nebo v /usr/local/bin/bashcokoliv a zmenit jen hlavicku toho skriptu co vyzaduje novejsi verzi, tak zustane funkcnost napric systemem zachovana a vsechny skripty budou brat systemovej 4.2.x bash...
    porad nemam telo, ale uz mam hlavu... nobody

    Založit nové vlákno • Nahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.