Используйте шаблоны внутри shell скриптов, подставляя переменные среды.
Я буду использовать утилиту envsubst, которая является частью пакета gettext-base.
Создайте файл шаблона
Создайте шаблон, используя переменные среды.
$ cat configuration.yml
---
connection:
database:
name: ${DATABASE_NAME}
type: ${DATABASE_TYPE}
credentials:
user: ${SATABASE_USER}
pass: ${DATABASE_PASS}
connection:
host: ${DATABASE_HOST}
port: ${DATABASE_PORT}
Эти переменные среды будут заменены утилитой envsubst.
Простая подстановка переменных окружения
Установите переменные среды.
$ export DATABASE_NAME="bookmarks"
$ export DATABASE_TYPE="postgres"
$ export DATABASE_USER="book"
$ export DATABASE_PASS="worm"
$ export DATABASE_HOST="172.16.0.21"
$ export DATABASE_PORT="5432"
Произведем замену всех переменных окружения.
$ cat configuration.yml | envsubst
---
connection:
database:
name: bookmarks
type: postgres
credentials:
user: book
pass: worm
connection:
host: 172.16.0.21
port: 5432
Простая подстановка переменных среды с использованием перенаправления шелла
Установите переменные среды.
$ export DATABASE_NAME="bookmarks"
$ export DATABASE_TYPE="postgres"
$ export DATABASE_USER="book"
$ export DATABASE_PASS="worm"
$ export DATABASE_HOST="172.16.0.22"
$ export DATABASE_PORT="5432"
Выполните замену всех переменных среды, используя перенаправление оболочки.
$ envsubst < configuration.yml > bookmarks_connection.yml
Посмотрите созданный файл.
$ cat bookmarks_connection.yml
---
connection:
database:
name: bookmarks
type: postgres
credentials:
user: book
pass: worm
connection:
host: 172.16.0.22
Простая подстановка переменных среды в несколько шагов
Определите и проверьте переменные, которые будут заменены.
$ envsubst --variables '$DATABASE_USER $DATABASE_PASS $DATABASE_NAME $DATABASE_TYPE'
DATABASE_USER
DATABASE_PASS
DATABASE_NAME
DATABASE_TYPE
Выполните частичную замену переменных окружения.
$ DATABASE_USER=book DATABASE_PASS=worm DATABASE_NAME=notes DATABASE_TYPE=postgres envsubst '$DATABASE_USER $DATABASE_PASS $DATABASE_NAME $DATABASE_TYPE' < configuration.yml > connection_temp.yml
Посмотрите созданный файл, обратите внимание, что последние две настройки не определены:
$ cat connection_temp.yml
---
connection:
database:
name: notes
type: postgres
credentials:
user: book
pass: worm
connection:
host: ${DATABASE_HOST}
port: ${DATABASE_PORT}
Определите и проверьте переменные, которые будут заменены во втором прогоне.
$ envsubst --variables '$DATABASE_HOST $DATABASE_PORT'
DATABASE_HOST
DATABASE_PORT
Выполните частичную замену переменных окружения.
$ DATABASE_HOST=localhost DATABASE_PORT=5432 envsubst '$DATABASE_HOST $DATABASE_PORT' < connection_temp.yml > connection_final.yml
Посмотрите созданный файл,
$ cat connection_final.yml
---
connection:
database:
name: notes
type: postgres
credentials:
user: book
pass: worm
connection:
host: localhost
port: 5432
Простая подстановка переменных среды с использованием указанного префикса
Установите переменные среды.
$ export DATABASE_NAME="files"
$ export DATABASE_TYPE="postgres"
$ export DATABASE_USER="book"
$ export DATABASE_PASS="worm"
$ export DATABASE_HOST="172.16.0.42"
$ export DATABASE_PORT="5432"
Отображение переменных среды, использующих префикс DATABASE_.
$ echo "${!DATABASE_@}"
DATABASE_HOST DATABASE_NAME DATABASE_PASS DATABASE_PORT DATABASE_TYPE DATABASE_USER
Отобразим каждый элемент как переменную среды со знаком доллара.
$ printf '${%s}\n' ${!DATABASE_@}
${DATABASE_HOST}
${DATABASE_NAME}
${DATABASE_PASS}
${DATABASE_PORT}
${DATABASE_TYPE}
${DATABASE_USER}
Используйте этот список для выполнения замены указанных переменных среды.
$ envsubst "$(printf '${%s}\n' ${!DATABASE_@})" < configuration.yml
---
connection:
database:
name: files
type: postgres
credentials:
user: book
pass: worm
connection:
host: 172.16.0.42
port: 5432