Невозможно делать то, что вы хотите.
Среда процесса создается и передается ей его родителем. После запуска дочернего процесса его окружение становится полностью его собственным. Он не может быть изменен его родителем, а также не может быть изменен никакими дочерними элементами, которые он создает. У дочерних элементов будут свои собственные копии среды, и они смогут их изменять, но они не будут влиять на родительский. программа make, затем make запустит новую оболочку, которая запустит рецепт.
Эта третья программа просто не может изменить среду первой программы. Он даже не может изменить среду второй программы (make).
Способ only изменить среду первой программы (вашей оболочки) - использовать . ./scripts/test.sh
в этой программе (вместо запуска make
).
Если вы запустите ./scripts/test.sh
, он также не будет работать: это запустит новую оболочку, новая оболочка запустится этот сценарий и установите переменную среды, тогда новая оболочка выйдет, и ваша первая оболочка все равно не изменит свою среду.
Команда .
- это специальная команда оболочки, которая означает: не запускать новая оболочка для запуска этого сценария оболочки; вместо этого запустите команды, содержащиеся в файле в текущей оболочке , как если бы вы набрали их в приглашении оболочки.
В bash вы можете использовать source
в качестве псевдонима для .
и введите source ./scripts/test.h
, потому что некоторым людям легче понять: они означают одно и то же.
Вы также можете создать для этого функцию оболочки или псевдоним оболочки, потому что они также запускаться в том же процессе оболочки, а не в дочернем процессе.
Но нет возможности сделать это через make-файл или с помощью make.