Загрузить переменные окружения из файла только для следующего скрипта - PullRequest
1 голос
/ 10 апреля 2020

У меня есть один из этих .env файлов с несколькими установленными переменными, например:

VAR1=111
VAR2=222

Я хочу запустить скрипт (без его изменения), который использует эти переменные. Я знаю, что могу source этот файл в оболочке и экспортировать переменные из файла, например:

set -a
source myenvs.env   # this is my .env file
set +a
./myscript.sh  # this will use the variables

Проблема в том, что он загружает все те переменные в моей оболочке, чего я не делаю хочу (загрязнение оболочки.)

То, что я ищу, эквивалентно использованию env VAR1=111 VAR2=222 ./myscript.sh, но вместо этого получаю эти переменные из файла .env.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Сделайте это в подоболочке и среде основной оболочки не изменится. Например:

(
  set -a
  source myenvs.env   # this is my .env file
  exec ./myscript.sh  # avoid unnecessary fork()
)

Правда в том, что мне нужно, чтобы этот скрипт был гибким для работы с различными комбинациями настроек. Представьте, что у меня есть несколько файлов .env, таких как development.env, stagin.env, repro-bug-123.env и т. Д. c.

В этом случае будет более полезной функция.

with_env() (
  set -a
  source "$1"
  shift
  exec "$@"
)

with_env myenvs.env ./myscript.sh
0 голосов
/ 10 апреля 2020

Объявите переменные, которые вы не хотите менять как доступные только для чтения

declare -r VAR3 VAR4

, и отправьте остальные

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