Простой процессор шаблонов файлов конфигурации, который сохраняет bash переменных стиля - PullRequest
0 голосов
/ 19 июня 2020

Я должен ввести некоторые шаблоны поверх текстовых файлов конфигурации (yaml, xml, json), которые уже содержат bash -подобные синтаксические переменные. Мне нужно сохранить существующие bash -подобные переменные нетронутыми, но заменить мои. Список - это динамический c, переменные должны поступать из окружения. Что-то вроде простого процессора, использующего шаблон "$$ {MY_VAR}}", но игнорирующего $ MY_VAR. Предпочтительно чистый Bash или как можно меньшее количество необходимых инструментов.

Шаблон может быть $$ (VAR) или любым другим, что можно легко отделить от $ {VAR} и $ VAR. Ключевое ограничение - оно предназначено для процедуры запуска контейнера docker, которая вводит переменные среды в предоставленные шаблоны конфигурации сервиса и таким образом строит эту конфигурацию. Так что что-то вроде обработки Java или даже Perl не является вариантом.

Есть ли у кого-нибудь простой подход?

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

# process input file ($1) placing output into ($2) with shell variables substitution.
process_file() {
set -e
eval "cat <<EOF
$(<$1)
EOF
" | cat > $2
}

1 Ответ

0 голосов
/ 19 июня 2020

Очевидное чистое решение, которое слишком сложно для файла Docker из-за количества необходимых пакетов:

perl -p -i -e 's/\$\{\{([^}]+)\}\}/defined $ENV{$1} ? $ENV{$1} : $&/eg' < test.json

Это отфильтровывает $ {{VAR}}, даже лучше - только установленные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...