Вопрос

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

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

[hooks]
changegroup = shell_script
changegroup.env = env

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top