Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Chcę do skryptu wczytać zmienne z pliku konfiguracyjnego. Na pozór prosta sprawa:
source plik
Problem z tym tylko, że metoda ta nie jest przesadnie bezpieczna. Załóżmy bowiem, że ktoś kreatywny w pliku tym zapisał nie tylko potrzebne zmienne, ale np. rm -rf $HOME — nieszczęście gotowe. Zna ktoś jakiś prosty sposób na wczytanie z pliku tylko zmiennych (a jeszcze lepiej tylko zdefiniowanych przez mnie zmiennych)?
Offline
Nie wiem czy uznasz za mądre używanie do tego awka, jednak proponuje takie rozwiązanie:
Plik konfiguracyjny:
ZMIENNA=16665 BLE=5555 Apfe=123 ATOPOPSUTAZMIENNA="666"
A skrypt wczytujacy:
eval $(awk -F'=' '/.+=.+/{ if ( $1 == "BLE" || $1 == "ZMIENNA" || $1 == "Apfe" ) print $1 "=" $2 }' plik.conf)
eval output skryptu interpretuje jako nowe zmienne środowiskowe.
Offline
awk jest super :) Dzięki wielkie.
Tylko jeden defekt jest — zmienne muszą być jednolinijkowe, w momencie gdy jakaś jest kilkulinijkowa, np.
ZMIENNA="kopy tko"
to awk się wysypuje. Niestety muszę brać pod uwagę, że jedna ze zmiennych może być właśnie w takiej postaci. Co prawda mogę być Złym I Niedobrym Skrypciarzem™ i nakazać używania \n, ale wolałbym nie być. Da się to jakoś przeskoczyć?
Ostatnio edytowany przez azhag (2008-07-19 23:58:58)
Offline
Na pewno się da :>
Ale w tym momencie nie przychodzi mi nic do głowy (Jeśli pierwszą rzeczą o jakiej pomyślałem był program w C/C++ do parsowania tego, to znaczy że więcej nie wymyslę ;] )
Offline
urug napisał(-a):
Na pewno się da :>
wiadomo, wszystk się da, tylko trzeba wiedzieć jak :)
urug napisał(-a):
Ale w tym momencie nie przychodzi mi nic do głowy (Jeśli pierwszą rzeczą o jakiej pomyślałem był program w C/C++ do parsowania tego, to znaczy że więcej nie wymyslę ;] )
;]
Trudno, Źli i Niedobrzy Użytkownicy™ będą się musieli dostosować. :)
Jeszcze raz dzięki.
Offline
ponizszy kod pozwoli na lamanie linii w ramach zmiennych objetych w " ... nie dopuszcza natomiast w tego typu zmiennych \"
eval $(awk ' BEGIN { FS="[=]" cont=0 } cont != 0 && /\"/ { cont=0 print $0 next } cont != 0 { print $0 next } $1 != "BLE" && $1 != "ZMIENNA" && $1 != "Apfe" { next } /.+=[\t ]*\"[^\"]+$/ { cont=1 } /.+=.+/ { print $1 "=" $2 } ' config.sh)
OSTRZEZENIE: w obu wypadkach wpisanie w pliku konfiguracyjnym
ZMIENNA=16665; ls -l
spowoduje wykonanie komendy ls -l
Edit:
wydaje się ze ponizsze rozwiazuje wysztskie problemy z takim importem:
eval export `cat config.sh`
Ostatnio edytowany przez bercik (2008-07-20 20:05:03)
Offline
Strony: 1