Как экспортировать переменные окружения в Makefile - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь экспортировать переменные среды, чтобы они могли быть доступны в родительской оболочке Makefile:

export-vars:
    # extract vars from text file - remove comments - export output
    export $$(cat env.txt | grep -v ^# | xargs) 

Тогда, когда я бегу:

$ make export-vars
$ echo $SOME_VAR_EXPORTED_FROM_MAKEFILE

Я ожидаю, что переменные в тексте будут установлены как переменные среды.

Любая помощь, как это сделать в рамках цели / правила?

1 Ответ

0 голосов
/ 17 мая 2018

Вы не можете сделать это с помощью make-файла ИЛИ с помощью отдельного сценария оболочки. Когда вы запускаете make или запускаете сценарий оболочки, он создает новый процесс. Любые изменения, внесенные в среду этого процесса, будут отброшены при выходе из этого процесса. Невозможно (в UNIX-подобной системе) процессу изменить среду своего родительского процесса.

Единственное, что вы можете сделать, это либо написать функцию оболочки, которая вызывается внутри процесса оболочки, который вы запускаете (который отображает ваше приглашение и т. Д.), Либо иметь скрипт, который вы используете, а не выполняете: он будет заставить скрипт работать в том же процессе оболочки, а не создавать новый.

Таким образом, вы могли бы написать функцию оболочки в вашем ~/.bashrc или подобном:

setvars () { export $(grep -v ^# env.txt | xargs); }

Или вы можете написать отдельный сценарий оболочки, но вы не можете его запустить, вам нужно его получить (команда . получает сценарий, а не запускает его):

. set-my-vars.sh
...