Снимите меня с тормоза!
Есть конфиг типа
param1=111
param2=222
Надо разобрать его шеллом так, чтобы получить переменные
$param1, param2 со значениями соотв-но 111 и 222Спасибо
>Снимите меня с тормоза!
>Есть конфиг типа
>param1=111
>param2=222
>Надо разобрать его шеллом так, чтобы получить переменные
>$param1, param2 со значениями соотв-но 111 и 222
>
>Спасибо
cat config.txt| grep -v '^ *#'| while read param1 param2; do
echo "$param1 - $param2"
doneсмотри хинты, это оттуда. (http://www.opennet.me/tips/sml/)
>>Есть конфиг типа
>>param1=111
>>param2=222
>>Надо разобрать его шеллом так, чтобы получить переменные
>>$param1, param2 со значениями соотв-но 111 и 222
>
>
>cat config.txt| grep -v '^ *#'| while read param1 param2; do
> echo "$param1 - $param2"
>done
Вообще-то просили не напечатать, а создать кучу переменных.
Т.е., в приведенном примере надо не
== echo "$param1 - $param2" ==
а == eval `echo ${param1}=${param2}` ==
У меня это работает, но почему-то только в таком виде:
while read name value
do
eval `echo ${name}=${value}`
done < config.txt
Если же я пробую не прочитать прямо из config.txt,
а сделать типа:
sed 's/=/ /' config.txt | while .......
нифига не получаю. Почему???
>Снимите меня с тормоза!
>Есть конфиг типа
>param1=111
>param2=222
>Надо разобрать его шеллом так, чтобы получить переменные
>$param1, param2 со значениями соотв-но 111 и 222
>
>Спасибоsas@tibook:tmp # cat >conf <<-EOF
> # --- my comment ...
> p1=1111
> p2=2222
> EOFsas@tibook:tmp # eval $(awk -F = '/^[^#]*=/{ vars = sprintf( "%s %s", vars, $1); print $1 "=\"" $2 "\";" }END { print "vars=\"" vars "\";" }' conf)
sas@tibook:tmp # for p in $(echo $vars); do eval echo $p=\$$p ; done
p1=1111
p2=2222ili
sas@tibook:tmp # echo $p1
1111Also it is possible to add export to awk scriptand use bash's array instead of vars string with parameters delimited by ' ', but this is just a draft
Good luck
--- sas
==ФАЙЛ /tmp/config.txt
var1=1
var2=2
export var1
export var2
==============ФАЙЛ set.sh
#! /bin/sh
conf_file='/tmp/config.txt'
. $conf_file
echo $var1
=============
Hi,Sorry but your solution has some limitations:
1. Your config MUST have a valid shell syntax in order to be sourced. Config file can have some other syntax.
2. Also my solution offers variable "vars" which has a list of all parameter's names, delimited by spaces , which is very helpful for generic processingThanks
--- sasPS I understand that my suggestion is also not perfect. For example i'm not checking for double quotes inside parameters value, but as i said it is draft.
>==ФАЙЛ /tmp/config.txt
>var1=1
>var2=2
>export var1
>export var2
>============
>
>==ФАЙЛ set.sh
>#! /bin/sh
>conf_file='/tmp/config.txt'
>. $conf_file
>echo $var1
>=============