Установка переменных среды для Mercurial Hook
Я пытаюсь вызвать сценарий оболочки, который устанавливает кучу переменных окружения на нашем сервере из ртутного хука. Сценарий оболочки вызывается нормально, когда появляется новая группа изменений, но переменные среды не переносятся после вызова сценария оболочки.
Мой hgrc файл в репозитории выглядит так:
[hooks]
changegroup = shell_script
changegroup.env = env
Я могу видеть выходные данные сценария оболочки, а затем выходные данные команды env, но команда env не включает новые переменные среды, установленные сценарием оболочки.
Я проверил, что сценарий оболочки работает нормально, когда запускается сам по себе, но при запуске в контексте ртутного хука он не устанавливает среду должным образом.
1 ответ
Сценарии оболочки не могут изменить свою среду.
http://tldp.org/LDP/abs/html/gotchas.html
Сценарий не может экспортировать переменные обратно в родительский процесс, оболочку или в среду. Как мы узнали в биологии, дочерний процесс может наследоваться от родителя, но не наоборот
$ cat > eg.sh
export FOO="bar";
^D
$ bash eg.sh
$ echo $FOO;
$
Кроме того, проблема больше, так как у вас есть несколько вызовов Bash
bash 1 -> hg -> bash 2 ( shell script )
-> bash 3 ( env call )
это было бы все равно что думать, что я могу установить переменную в одном скрипте php и затем волшебным образом получить ее с другой, просто запустив одну за другой.