Установка переменных среды для Mercurial Hook - PullRequest
1 голос
/ 18 сентября 2008

Я пытаюсь вызвать сценарий оболочки, который устанавливает кучу переменных окружения на нашем сервере из ртутного хука. Сценарий оболочки вызывается нормально, когда появляется новая группа изменений, но переменные среды не переносятся после вызова сценария оболочки.

Мой hgrc-файл в репозитории выглядит так:

[hooks]
changegroup = shell_script
changegroup.env = env

Я могу видеть выходные данные сценария оболочки, а затем выходные данные команды env, но команда env не включает новые переменные среды, установленные сценарием оболочки.

Я проверил, что скрипт оболочки работает нормально, когда запускается сам по себе, но при запуске в контексте ртутного хука он не устанавливает среду должным образом.

1 Ответ

2 голосов
/ 18 сентября 2008

Сценарии оболочки не могут изменять свою среду.

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

...