The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Разбор конфига по всем переменным"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

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

Спасибо

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Разбор конфига по всем переменным"
Сообщение от sas emailИскать по авторуВ закладки on 22-Авг-03, 13:31  (MSK)
>Снимите меня с тормоза!
>Есть конфиг типа
>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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Разбор конфига по всем переменным"
Сообщение от konst emailИскать по авторуВ закладки on 22-Авг-03, 16:37  (MSK)
==ФАЙЛ /tmp/config.txt
var1=1
var2=2
export var1
export var2
============

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Разбор конфига по всем переменным"
Сообщение от sas emailИскать по авторуВ закладки on 22-Авг-03, 20:50  (MSK)
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
>=============


  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру