Я должен ввести некоторые шаблоны поверх текстовых файлов конфигурации (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
}