URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2013
[ Назад ]

Исходное сообщение
"Разбор конфига по всем переменным"

Отправлено Konstantin , 22-Авг-03 12:19 
Снимите меня с тормоза!
Есть конфиг типа
param1=111
param2=222
Надо разобрать его шеллом так, чтобы получить переменные
$param1, param2 со значениями соотв-но 111 и 222

Спасибо


Содержание

Сообщения в этом обсуждении
"Разбор конфига по всем переменным"
Отправлено etz , 22-Авг-03 12:41 
>Снимите меня с тормоза!
>Есть конфиг типа
>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/)


"Разбор конфига по всем переменным"
Отправлено Konstantin , 22-Авг-03 16:11 
>>Есть конфиг типа
>>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 .......
нифига не получаю. Почему???


"Разбор конфига по всем переменным"
Отправлено sas , 22-Авг-03 13:31 
>Снимите меня с тормоза!
>Есть конфиг типа
>param1=111
>param2=222
>Надо разобрать его шеллом так, чтобы получить переменные
>$param1, param2 со значениями соотв-но 111 и 222
>
>Спасибо

sas@tibook:tmp # cat >conf <<-EOF
>   # --- my comment    ...
> p1=1111
> p2=2222
> EOF

sas@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=2222

ili

sas@tibook:tmp # echo $p1
1111

Also 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


"Разбор конфига по всем переменным"
Отправлено konst , 22-Авг-03 16:37 
==ФАЙЛ /tmp/config.txt
var1=1
var2=2
export var1
export var2
============

==ФАЙЛ set.sh
#! /bin/sh
conf_file='/tmp/config.txt'
. $conf_file
echo $var1
=============


"Разбор конфига по всем переменным"
Отправлено sas , 22-Авг-03 20:50 
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 processing

Thanks
--- sas

PS 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
>=============