nixp.ru v3.0

22 января 2017,
воскресенье,
02:47:13 MSK

Аутсорсинг Linux с компанией «Флант»
Миша написал 26 декабря 2014 года в 18:14 (2105 просмотров) Ведет себя неопределенно; открыл 4 темы в форуме, оставил 3 комментария на сайте.

В питоне это делается примерно так:
Есть некий конфиг «settings»
в нем есть записи типа

[root_info]
root_login = root
root_pass = 12345
root_email = root@localhost.localdomain

[urls_info]
global_url=192.168.0.1

Скажем я хочу задавать ip, пароли и др через переменные в скрипте — делается примерно так

settings = SafeConfigParser()
settings.read(’./settings’)

USER = settings.get(’root_info’, 'root_login’)
PASS = settings.get(’root_info’, 'root_pass’)
MYIP = settings.get(’urls_info’, 'global_url’)

потом подставляю переменные USER PASS MYIP куда мне там надо…

Как такую же штуку реализовать в bash, что бы из ТОГО ЖЕ конфига считывать данные в переменные?
Подчеркну я буду использовать один и тот же конфиг для bash и для python скриптов!

fhunter

был бы просто: переменная = значение — тогда довольно просто. а вот с секциями — не знаю.
Распотрошить сначала по секциям во временные файлы, потом читать из соответствующих файлов?

rgo

На bash такое довольно неудобно парсить. Если есть возможности сменить формат конфига, то стоит его сменить на что-нибудь с меньшей контекстной зависимостью:

root_info.root_login = root
root_info.root_pass = 12345
root_info.root_email = root@localhost.localdomain
root_info.global_url=192.168.0.1

А если сменить никак, то можно написать отдельную утилиту для извлечения/добавления данных. Утилитку, которая будет выдавать данные в удобном виде, например, типа:

$ config-get root_info:root_email
root@localhost.localdomain

Обломно может быть запускать эту утилитку для того, чтобы извлечь десяток значений — тормозить будет, но это решается либо написанием утилитки на C, либо можно научить утилитку выдавать сразу несколько ключей конфига, по одному на строчку — это будет несколько быстрее.

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.