2016-06-21 11 views
0

私のプロジェクトでは、makefileからenv varに何かを追加する必要があります。メークファイルからシステムへのエクスポート環境変数

はまず、メイクファイル

all: 
    $(shell source <(echo export MYVAR=$(MYVAR):otherstuff)) 

そして、何私は技術的には、MYVARがすべき

export MYVAR=stuff 
make 
echo $MYVAR 

を達成しようとしているものが含まれます:otherstuffを

はここにサンドボックス化問題です。私は私が間違って何をしたか知らないが、その代わりに、私はbashのエラー

/bin/sh: -c: line 0: syntax error near unexpected token `(' 
/bin/sh: -c: line 0: `source <(echo export MYVAR=$MYVAR:otherstuff)' 

を持って、コマンドはメイクファイルの外で働いていました。

ありがとうございます!

+5

子プロセス( 'make'など)は、すべての実用的な目的で親プロセス(シェル)の環境に影響を与えることはできません。要件を再考する必要があります。 –

+0

または 'AYY'の値を'/tmp'ファイルに書き込んだ後、シェルスクリプト内のそのファイルから読み込みます(推奨しませんが、必要ならば、既存の '/ tmp'ファイルを削除することを忘れないでください)。起動前のファイル、その後のクリーンアップ)。がんばろう。 – shellter

+0

@shellter例はありますか? – Bl4ckb0ne

答えて

1

そして、私は

export MYVAR=stuff 
make 
echo $MYVAR 

を達成しようとしているので、技術的には、MYVARはものが含まれなければならない:otherstuff。

コメントに記載されているように、あなたはできません。環境のコピーは、子プロセス(make呼び出し)によって親プロセス(シェルを実行するシェル)(make呼び出し)から継承され、子プロセスが変数を使用していることは、make自身またはその子プロセス。しかし親は決してありません。あなたがmake print-envを行うときに今、それはこのような出力を生成する

print-env: 
    @echo export MYVAR=$(MYVAR):otherstuff ";" 
    @echo export MYOTHERVAR=helloworld ";" 

:例えば一般

、目的のために私はMakefileからいくつかの情報をエクスポートする必要があり、私条項特別なターゲット、

export MYVAR=stuff:otherstuff ; 
export MYOTHERVAR=helloworld ; 

メイクファイルを使用すると、出力からコマンドプロンプトに簡単にコピーして実行するコマンドが生成されています。

ことが可能となんとかですが、私は直接シェルにmakeの出力の供給に対して助言する:

eval "`make print-env`" 

またはそれ以上のラジカルを:

`make print-env` 

make出力は一般に不安定であるため、誤って他のルールの出力を含む可能性があり、シェルを混乱させる可能性があります。

関連する問題