The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"bash: чтение конфига из файлов"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Системное и пользовательское ПО / Linux)
Изначальное сообщение [ Отслеживать ]

"bash: чтение конфига из файлов"  +/
Сообщение от stakado email(ok) on 20-Фев-13, 10:18 
Здравствуйте!
Есть директория, в ней лежат файлы , примерно следующего содержания:

файл admin.wb:
login=stakado
pass=zzzzz
dir=d$/BackupTest
dir=d$/Test2

Подскажите, пожалуйста, каким образом данные из этих файлов перегнать в bash-переменные, чтобы их в дальнейшем можно было удобно использовать.
Мне представляется некий объект, у которого есть атрибуты - login, pass и сколько угодно много атрибутов dir, но вот как этот объект реализовать не представляется.

Подскажите, пожалуйста, каким образом это реализовать в скрипте на bash'e?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "bash: чтение конфига из файлов"  +/
Сообщение от orangeant on 20-Фев-13, 11:14 
Использовать source aka dot command в скрипте, который будет использовать переменные определенные в другом файле.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "bash: чтение конфига из файлов"  +/
Сообщение от stakado email(ok) on 20-Фев-13, 11:41 
> Использовать source aka dot command в скрипте, который будет использовать переменные определенные
> в другом файле.

команда source выполнит указанный мною файл. Если в файле разместить переменные (по сути команды bash), то эти переменные и присвоят себе указанные значения. Т.е. таким образом задание переменных (в формате bash: переменная=значение) лишь выносится в отдельный файл. Эт ясно, спасибо.
Но что же делать с параметрами, у которых одинаковые названия? В указанном выше примере - такие переменные dir. После выполнения моего конфига с помощью команды source я увижу лишь последнее значение переменной, а мне нужны все, которые указаны в конфиге.
Можно предложить вариант задавать в конфиге эти переменные как массив (dir[0]=value0,dir[1]=value1), но мне такой вариант не нравится.
Ладно, дальше больше. У меня таких файлов много, если они все по-очереди выполнятся, то я увижу переменные лишь из последнего конфига, мне же нужны значения из всех конфигов.

После написания первого поста возник вопрос: можно ли каким-нибудь образом в bash'e создать объект с заданным набором атрибутов? Ну а дальше использовать массив этих объектов...

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "bash: чтение конфига из файлов"  +/
Сообщение от fantom (ok) on 20-Фев-13, 12:05 
>[оверквотинг удален]
> помощью команды source я увижу лишь последнее значение переменной, а мне
> нужны все, которые указаны в конфиге.
> Можно предложить вариант задавать в конфиге эти переменные как массив (dir[0]=value0,dir[1]=value1),
> но мне такой вариант не нравится.
> Ладно, дальше больше. У меня таких файлов много, если они все по-очереди
> выполнятся, то я увижу переменные лишь из последнего конфига, мне же
> нужны значения из всех конфигов.
> После написания первого поста возник вопрос: можно ли каким-нибудь образом в bash'e
> создать объект с заданным набором атрибутов? Ну а дальше использовать массив
> этих объектов...

для bash это не объект, а переменная, перестаньте думать обьектами, думайте переменными...

Как с вашей точки зрения bash будет распознавать
Х=1
Х=Н-1
когда вам нужно изменить значение переменной, а когда - дописать элемент массива?

в подавляющем большинстве конфигов ваш вопрос решается довольно просто,
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin

т.е. PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin

Надо вам чтобы была куча значений -> пишите обработчик, на входе ему даете ваш файлик, если переменной еще нет - он ее тупо создает и присваевает значение, если такая уже есть - дописывает через то же ":" еще один "объект" в вашу переменную

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "bash: чтение конфига из файлов"  +/
Сообщение от stakado email(ok) on 20-Фев-13, 12:30 
>[оверквотинг удален]
> Х=Н-1
> когда вам нужно изменить значение переменной, а когда - дописать элемент массива?
> в подавляющем большинстве конфигов ваш вопрос решается довольно просто,
> echo $PATH
> /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
> т.е. PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
> Надо вам чтобы была куча значений -> пишите обработчик, на входе ему
> даете ваш файлик, если переменной еще нет - он ее тупо
> создает и присваевает значение, если такая уже есть - дописывает через
> то же ":" еще один "объект" в вашу переменную

Так-с, ладно. В каждом конфиге я завожу 1 параметр dir, в котором указаны все значения переменной через :.
Далее, если я инициализирую все конфиги с помощью source - я увижу значения переменных лишь из последнего файла, что не есть верно.
Более того, мне не очень понятно как в дальнейшем разделять значения из переменной dir. Писать обработчик, который будет искать в строке : и отделять таким образом значения? Корявым мне видится такой вариант.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "bash: чтение конфига из файлов"  +/
Сообщение от fantom (ok) on 20-Фев-13, 13:53 
>[оверквотинг удален]
>> даете ваш файлик, если переменной еще нет - он ее тупо
>> создает и присваевает значение, если такая уже есть - дописывает через
>> то же ":" еще один "объект" в вашу переменную
> Так-с, ладно. В каждом конфиге я завожу 1 параметр dir, в котором
> указаны все значения переменной через :.
> Далее, если я инициализирую все конфиги с помощью source - я увижу
> значения переменных лишь из последнего файла, что не есть верно.
> Более того, мне не очень понятно как в дальнейшем разделять значения из
> переменной dir. Писать обработчик, который будет искать в строке : и
> отделять таким образом значения? Корявым мне видится такой вариант.

Однако похоже именно он спользуется


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "bash: чтение конфига из файлов"  +/
Сообщение от LSTemp (ok) on 21-Фев-13, 09:40 
>[оверквотинг удален]
>> даете ваш файлик, если переменной еще нет - он ее тупо
>> создает и присваевает значение, если такая уже есть - дописывает через
>> то же ":" еще один "объект" в вашу переменную
> Так-с, ладно. В каждом конфиге я завожу 1 параметр dir, в котором
> указаны все значения переменной через :.
> Далее, если я инициализирую все конфиги с помощью source - я увижу
> значения переменных лишь из последнего файла, что не есть верно.
> Более того, мне не очень понятно как в дальнейшем разделять значения из
> переменной dir. Писать обработчик, который будет искать в строке : и
> отделять таким образом значения? Корявым мне видится такой вариант.

man bash:
subshell
циклы
переменные


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "bash: чтение конфига из файлов"  +/
Сообщение от fantom (ok) on 21-Фев-13, 11:31 
>[оверквотинг удален]
>> указаны все значения переменной через :.
>> Далее, если я инициализирую все конфиги с помощью source - я увижу
>> значения переменных лишь из последнего файла, что не есть верно.
>> Более того, мне не очень понятно как в дальнейшем разделять значения из
>> переменной dir. Писать обработчик, который будет искать в строке : и
>> отделять таким образом значения? Корявым мне видится такой вариант.
> man bash:
> subshell
> циклы
> переменные

Как все это загнать в одну переменную способ простой:
вместо

dir=<значение>

пишите
dir="${dir}<значение><разделитель>"

если значения в dir НЕ допускают пробелов - все еще проще

dir="${dir}<значение> " (пробел в конце нужен)

разбить сие на составные части если разделитель - пробел

for TEST in ${dir}
do
<что делаем? например формируем массив array_dir[0], array_dir[1] и т.д.>
done

Так что меняете вид конфига и значения будут не переписываться, а дописываться.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "bash: чтение конфига из файлов"  +/
Сообщение от stakado email(ok) on 22-Фев-13, 08:51 
>[оверквотинг удален]
> пишите
> dir="${dir}<значение><разделитель>"
> если значения в dir НЕ допускают пробелов - все еще проще
> dir="${dir}<значение> " (пробел в конце нужен)
> разбить сие на составные части если разделитель - пробел
> for TEST in ${dir}
> do
> <что делаем? например формируем массив array_dir[0], array_dir[1] и т.д.>
> done
> Так что меняете вид конфига и значения будут не переписываться, а дописываться.

Где ж Вы раньше были, я уже своих костылей понапридумывал. Ваш способ так-то поэлегантнее будет.

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "bash: чтение конфига из файлов"  +/
Сообщение от fantom (ok) on 22-Фев-13, 12:10 
>[оверквотинг удален]
>> если значения в dir НЕ допускают пробелов - все еще проще
>> dir="${dir}<значение> " (пробел в конце нужен)
>> разбить сие на составные части если разделитель - пробел
>> for TEST in ${dir}
>> do
>> <что делаем? например формируем массив array_dir[0], array_dir[1] и т.д.>
>> done
>> Так что меняете вид конфига и значения будут не переписываться, а дописываться.
> Где ж Вы раньше были, я уже своих костылей понапридумывал. Ваш способ
> так-то поэлегантнее будет.

Жаль запатентовать не получиться :)
Способ не мой - он в куче sell-овских скриптов используется ;)

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

12. "bash: чтение конфига из файлов"  +/
Сообщение от LSTemp (ok) on 23-Фев-13, 08:10 
> Жаль запатентовать не получиться :)
> Способ не мой - он в куче sell-овских скриптов используется ;)

присвоение значения переменной запатентовать вряд ли удастся :)


Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

10. "bash: чтение конфига из файлов"  +/
Сообщение от McLeod095 (??) on 22-Фев-13, 15:32 
>[оверквотинг удален]
>> если значения в dir НЕ допускают пробелов - все еще проще
>> dir="${dir}<значение> " (пробел в конце нужен)
>> разбить сие на составные части если разделитель - пробел
>> for TEST in ${dir}
>> do
>> <что делаем? например формируем массив array_dir[0], array_dir[1] и т.д.>
>> done
>> Так что меняете вид конфига и значения будут не переписываться, а дописываться.
> Где ж Вы раньше были, я уже своих костылей понапридумывал. Ваш способ
> так-то поэлегантнее будет.

ну можно еще вот так скормить файл


echo -e "dir=1\ndir=2\ndir=45\n" | sed 's/dir=//' |sed -e :a -e '/$/N; s/\n/:/; ta'
1:2:45:

понимаю что там уже есть один пайп
но сходу не могу придумать как что бы только dir хватал из файла
только если

и запихнуть вывод в переменную.
grep "dir=" file | sed 's/dir=//' |sed -e :a -e '/$/N; s/\n/:/; ta'

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

11. "bash: чтение конфига из файлов"  +/
Сообщение от LSTemp (ok) on 23-Фев-13, 07:39 
>[оверквотинг удален]
>> если значения в dir НЕ допускают пробелов - все еще проще
>> dir="${dir}<значение> " (пробел в конце нужен)
>> разбить сие на составные части если разделитель - пробел
>> for TEST in ${dir}
>> do
>> <что делаем? например формируем массив array_dir[0], array_dir[1] и т.д.>
>> done
>> Так что меняете вид конфига и значения будут не переписываться, а дописываться.
> Где ж Вы раньше были, я уже своих костылей понапридумывал. Ваш способ
> так-то поэлегантнее будет.

Вам же сказали: читать про переменные циклы и сабшелы. Или потом на каждый чих в своем скрипте будете отдельную тему заводить? Не лучше ли сразу оболочку командной строки изучить, с которой работаете?


Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

Архив | Удалить

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




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

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