1

マーキュリアルフックからサーバーに一連の環境変数を設定するシェルスクリプトを呼び出そうとしています。新しい変更グループが着信すると、シェルスクリプトは正常に呼び出されますが、環境変数はシェルスクリプトの呼び出しを超えて引き継がれません。

リポジトリ上の私のhgrcファイルは次のようになります。

[hooks]
changegroup = shell_script
changegroup.env = env

シェルスクリプトの出力、次にenvコマンドの出力を確認できますが、envコマンドには、シェルスクリプトによって設定された新しい環境変数が含まれていません。

シェルスクリプトを単独で実行すると正常に動作することを確認しましたが、Mercurialフックのコンテキストで実行すると、環境が適切に設定されません。

4

1 に答える 1

2

シェルスクリプトは環境を変更できません。

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スクリプトに変数を設定し、次々に実行するだけで魔法のように別のスクリプトで変数を取得できると考えるようなものです。

于 2008-09-17T22:09:08.617 に答える