私はPerlスクリプトからenv変数を設定しようとしています。これをMakefile内で使用すると動作しません。 ENVハッシュツリーをダンプすると、変数が正常に設定されたことが示されます。Perlからenv変数を設定し、Makefileで使用する
$ENV{"VIP_LIST"} = $vip_exists;
私はPerlスクリプトからenv変数を設定しようとしています。これをMakefile内で使用すると動作しません。 ENVハッシュツリーをダンプすると、変数が正常に設定されたことが示されます。Perlからenv変数を設定し、Makefileで使用する
$ENV{"VIP_LIST"} = $vip_exists;
VIP_LIST=$(perl my.pl)
Makefileのコード
list_gen: $(TESTBENCH_PATH)/blocks/soc_tb/global/default
perl list_gen.pl; \
$(MAKE) $(RECITAL_PATH)/catalog/catalog.xml
@ touch [email protected]
# Generates catalog.xml from .xmls of VIPs
$(RECITAL_PATH)/catalog/catalog.xml: $(VIP_XMLs)
@echo "# generating catalog.xml " ; \
echo "vip list is $(VIP_LIST)" ; \
rpfCatalog --add $(VIP_XMLs); \
for vip in $(VIP_LIST); \
do \
rpfCatalog --add $$TESTBENCH_PATH/common_blocks/$$vip/global/default.xml; \
done
Perlのスクリプトコードは、親シェルの変数にスクリプトの出力を保存します。
HTH あなたのPerlスクリプトを実行ゲオルク
は、プロンプト上の$(./ myperlscript.pl)のようにそれを行います。何をする必要が
$ENV{VIP_LIST} = $vip_exists;
ドロップ引用符
現在のシェルでperlインタープリタを実行しようとしていますか(シェルスクリプトの先頭にドットを付けます)? – blackpen
はい、私です。同じプロセスでエクスポートされます。 –
なぜdownvote? –
である私はそれから(perlのスクリプトのような)任意の外部コマンドを実行することにより、を作るの環境を更新するための任意のエレガントな方法があるとは思いません。直接の方法でさえもうまくいかないからです。
/home/user> cat makefile
NUM=100
first:
NUM=200
echo $(NUM)
second:
NUM=200; echo $(NUM)
third:
NUM=200; \
echo $(NUM);
/home/user> make first
NUM=200
echo 100
100
/home/user> make second
NUM=200; echo 100
100
/home/user> make third
NUM=200; \
echo 100;
100
あなただけそれが親の環境だ修正するためのperlスクリプトを探している場合は、このようなものは、(非常に限られた方法で)動作します:
/home/user> cat change_env.pl
#!/usr/bin/perl -w
print "NUM=100\n";
/home/user> NUM=1
/home/user> echo $NUM
1
/home/user> eval $(./change_env.pl)
/home/user> echo $NUM
100
が元に来てあなたの質問、..あなたのシェル環境を変更した後にmakeを呼び出すことはできませんか?
ありがとうございますが、私はそれを探していません。私はenvが必要です。(makefileから呼び出された)perlスクリプトからmakefileの中で更新される変数 –
私はいくつかの(x)ファイルで意味を修正し、envを更新するperlスクリプトを実行すると考えました。変数を使用すると、更新された変数が使用されますが、今はmake(Xファイル)を読み込んで変数を更新する必要があります。あなたはもっと良い提案がありますか?ありがとう –
そして、perlスクリプトはどのようにmakeを呼び出しますか? – Petesh
環境変数を設定して後で使用するためにperlスクリプトを使用しようとしていますか? perlスクリプトはサブシェルで実行されます。それは親のシェルにそれの価値を持っていません。 – blackpen
perlスクリプトはmakeを起動していません。 perlスクリプトの実行後.. makeは再帰的に呼び出されるので、env。変数更新が表示されます –