7

phingを使用してビルドスクリプトで環境変数を設定しようとしています。これは通常、次のようなコマンドラインで実行されます。

export MY_VAR=value

Phingで私は次のことをしましたが、機能していません。

<exec command="export MY_VAR=value" />
4

3 に答える 3

10

これはかなり古い質問だと思いますが、最善の方法で回答されているとは思いません。たとえば、phing から phpunit を実行していて、phpunit を呼び出す前にエクスポートを行いたい場合など、シェル変数をエクスポートする場合は、次のようにします。

<exec command="export MY_VAR=value ; /path/to/phpunit" />

エクスポートを実行し、同じ exec タグ内でコマンドを呼び出すだけです。示されているように、export ステートメントとシェル実行可能ファイルをセミコロンで区切ります。スクリプトは、標準の php 関数を使用して値にアクセスできます。

$myVar = getenv('MY_VAR');
于 2014-07-15T13:35:41.597 に答える
6

大胆な主張: PHP で (Unix) シェル変数を設定/エクスポートして、php スクリプトを開始したスコープ内で見えるようにする方法はありません。

php myfile.php (does putenv or shell_exec('export foo=bar');)
echo $foo

何も返しません。PHPはそれを行うことができないので、どちらもpingを実行できません。

複数のスクリプト実行でシェル環境変数にアクセスすること (それが必要な場合) も、非常にステートフルな単一の設計上の決定のように思えます。

それとは別に、phing に固執し、無駄のない教訓を学ぶことを強くお勧めします。Phing はステートレスな思考をある程度支援します。

于 2011-04-28T13:40:39.357 に答える
4

phing については聞いたことがありませんでしたが、これはビルド ツールとして非常に有望に見えます。投稿していただきありがとうございます!phing.info のドキュメントを調べたところ、次の可能性が見つかりました。

#0 1 点だけ明確にしたいと思います。そう言っているのか

prompt$ > export MY_VAR=value
prompt$ > phing build.xml

MY_VAR を値に設定しないので、実行中の ping プロセス内で表示されますか? 驚くかもしれませんが、これがビルド スクリプトの実行方法ではない場合は理解できます。

#1ビルドツールのコンテキストでは、execのような機能はスタンドアロンプ​​ログラムを実行することを意図していると思います。そのため、execが実行されてMY_VARが設定される可能性がありますが、これはすべて、execとしてすぐに消えるサブプロセスで行われますbuild.xml の次のタスクを終了し、処理を続行します。

phing スクリプトが env_vars の特定の値で実行されることを確認したいだけの場合は、試すことができます

Command-line arguments:
....
-D<property>=<value>    
  // Set the property to the specified value to be used in the buildfile

おそらく、あなたはできる

phing -DMY_VAR=value build.xml

#2 プロパティ ファイルの使用を検討しましたか? http://www.phing.info/docs/guide/stable/chapters/appendixes/AppendixF-FileFormats.htmlを参照 し、下にスクロールして build.properties に関する情報を確認してください。

#3も…

Phing Built-In Properties
Property    Contents
    env.*   Environment variables, extracted from $_SERVER.

あなたは次のようなものでそれらにアクセスします

 ${env.MY_VAR}

#4これはあなたが本当に望むものにより近いように見えます

<replacetokens>
  <token key="BC_PATH" value="${top.builddir}/"/>
  <token key="BC_PATH_USER" value="${top.builddir}/testsite/user/${lang}/"/>
</replacetokens>

これが役立つことを願っています。

于 2011-04-27T13:58:26.287 に答える