Portál AbcLinuxu, 19. dubna 2024 04:45


Dotaz: Vytvoreni promennych z vedlejsiho souboru

11.5.2005 19:57 KPR
Vytvoreni promennych z vedlejsiho souboru
Přečteno: 133×
Odpovědět | Admin
Zdravim, mam hlavni skript v BASH a potrebuji aby ve vedlejsim textovem souboru byly ulozeny nazvy a hodnoty promennych. (ve tvaru NAZEV PROMENNA) Nevim jak to mam vyresit v kodu,aby se promenne po spusteni hlavniho skriptu samy inicializovaly a naplnily. Pozn. export nechci pouzivat. A soubor je textovy, takze zadna bash syntaxe.

Priklad soubor.txt :
pozdrav ahoj
ip_adresa 127.0.0.1

Diky, KPR (kpr AT seznam cz )
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.5.2005 20:03 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: Vytvoreni promennych z vedlejsiho souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejjednodušší je mít formát
NÁZEV=PROMĚNNÁ
a pak to jenom načíst jako skript
source soubor.txt
11.5.2005 22:03 KPR
Rozbalit Rozbalit vše Re: Vytvoreni promennych z vedlejsiho souboru
Jo,jenze to prave nechci. PRotoze jakmile ten soubor bude #!/BIN/BASH , tak to nesplni ten ucel. Jednak chci aby mel ten soubor odebrany prava X, a jednak to je jako zabezpeceni.

Skript bude skryty + spustitelny,a text soubor s promennymi bude editovatelny uzivateli. Kdyby se nasel nejakej lama's co trosku ovlada bash,tak by to tak ztratilo ulohu bezpecnosti
11.5.2005 22:23 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
Rozbalit Rozbalit vše Re: Vytvoreni promennych z vedlejsiho souboru
Ten soubor v takovém případě nemusí mít práva ke spuštění, ani #!/bin/bash. Ale je pravda, že se provede jako skript v bashi, takže si tam může skutečně vepsat co chce a spustit to tak.
Copak toho není dost?
11.5.2005 22:24 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Vytvoreni promennych z vedlejsiho souboru
To není důvod, proč by přiřazení neměla vypadat jako přiřazení
pozdrav = ahoj
ip_adresa = 127.0.0.1
Projedeš je
sed "h;s/^ *\\([A-Za-z_]\\+\\) *=.*/\\1=/;t1;d;:1 x;s/^[^=]*= *//;s/ *\$//;s/['\\\"\$]/\\\&/g;s/^/\"/;s/$/\"/;x;G;s/\\n//"
a uděláš source soubor... Nebo je raději projedeš něčím jiným, nečitelným skriptům v sedu bych asi bezpečnost nesvěřoval...
11.5.2005 22:32 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
Rozbalit Rozbalit vše Re: Vytvoreni promennych z vedlejsiho souboru
Dá se vůbec nějak přijít na to, co ten skript vlastně dělá? :-) S manuálem v ruce by to bylo na docela dlouho, tipuji.
Copak toho není dost?
11.5.2005 22:38 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Vytvoreni promennych z vedlejsiho souboru
Ponechá jen řádky, které vypadají jako přiřazení, a v nich oescapuje v pravé straně všechny nebezpečné znaky. Ovšem nechat lusery nastavovat libovolné proměnné se také nemusí vyplatit (hint: LD_PRELOAD, LD_LIBRARY_PATH, PATH, CDPATH, IFS, ...).
11.5.2005 22:50 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
Rozbalit Rozbalit vše Re: Vytvoreni promennych z vedlejsiho souboru
Myslel jsem spíš jak bych na tohle přišel, kdybych najednou někde na nějakou takovou příšeru narazil :-)
Copak toho není dost?
11.5.2005 22:53 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: Vytvoreni promennych z vedlejsiho souboru
Pokud máš nějaké požadavky na bezpečnost, tak minimálně musíš mít pevně daný seznam proměnných, co smí uživatel zadat:
while read var value
do
    case "$var" in
    pozdrav)
        pozdrav="$value"
        ;;
    ip_adresa)
        ip_adresa="$value"
        ;;
    *)
        echo "Invalid variable: $var" >&2
        ;;
    esac
done <soubor.txt
12.5.2005 07:47 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Vytvoreni promennych z vedlejsiho souboru
Pozor na drobný chyták.
$ pokus=a
$ while read i; do pokus=$i; done <<<'ahoj'
$ echo $pokus
ahoj
$ echo huhu >pokus.txt
$ while read i; do pokus=$i; done <pokus.txt 
$ echo $pokus
huhu
$ echo huhu2 >pokus.txt
$ cat pokus.txt | while read i; do pokus=$i; done
$ echo $pokus
huhu
Zkušenější již určitě tuší proč. V posledním případě se smyčka while spustí jako subproces!
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
12.5.2005 21:56 KPR
Rozbalit Rozbalit vše Re: Vytvoreni promennych z vedlejsiho souboru
diky za tipy.ale skutecne se mi jedna o bezpecnost,tak nechci riskovat nejakou sanci spusteni neceho co bych nechtel. Aby si tam nejaky lama's user nepridal kousek sveho zaskodnickeho skriptu a pak by se to v ramci vlastniho kodu taky vykonalo :(.

testovani hodnot promennych uz mam zmaknute.

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.