Установка переменных среды для 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 и затем волшебным образом получить ее с другой, просто запустив одну за другой.

Другие вопросы по тегам