Mercurial Hook の環境変数の設定
-
01-07-2019 - |
質問
Mercurial フックからサーバー上に多数の環境変数を設定するシェル スクリプトを呼び出そうとしています。新しい変更グループが入ってくるとシェル スクリプトは正常に呼び出されますが、環境変数はシェル スクリプトの呼び出し以降も引き継がれません。
リポジトリ上の hgrc ファイルは次のようになります。
[hooks]
changegroup = shell_script
changegroup.env = env
シェル スクリプトの出力、次に env コマンドの出力が表示されますが、env コマンドにはシェル スクリプトによって設定された新しい環境変数が含まれていません。
シェル スクリプトは単独で実行すると正常に動作しますが、mercurial フックのコンテキストで実行すると環境が適切に設定されないことを確認しました。
解決
シェル スクリプトは環境を変更できません。
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 スクリプトで変数を設定し、次々に実行するだけで魔法のように別の php スクリプトで変数を取得できると考えるようなものです。
所属していません StackOverflow