2016-12-06 3 views
1

ビルドに必要な多くのENV変数をエクスポートするsource.shというシェルスクリプトがあります。シェルスクリプト内の次のコマンドに環境変数を使用できません

私は私のスクリプトでsource.shを実行することにより、これらのENV変数にアクセスしようとしているが、それでも私は、後続コマンドのENV変数にアクセスすることはできませんよという実行した後にしています。

私のスクリプトは似て:

+0

、通常のシェル対この環境変数を作成すべき正当な理由がありません変数とPOSIXの規則では、オペレーティングシステムとシェルの意味を持つ変数に使用する大文字の変数名の名前空間を指定します。小文字の名前はアプリケーションの用途に予約されています。 (正式には、そのは、環境変数の指定だが、大会は必ずしも両方の場所に適用されるので、通常のシェル変数を設定すると、どのような名前の環境変数を上書きします)。 –

答えて

1

sh source.sh

が起こっていない

#!/bin/bash 

sh source.sh 
cd $ROOT_VOS 
make 

しかし、ここでのCDの$ ROOT_VOSisは...あなたの親シェルいるので、実際に(shの別のコピーでsource.shを実行します子供がである場合、それは単なる「別個のコピー」ではなく、完全に異なるインタープリターです)。その別のインタプリタが終了すると、ローカル変数やプロセスローカル状態への他の変更はなくなります。 (環境変数は子プロセスによって継承され、それらはツリー上で親に伝搬されません)。代わりに


、使用:

# POSIX-compliant: execute every command in source.sh in the current shell 
. source.sh 

...か...余談として

# bash-specific, perhaps more-readable, synonym for the same 
source source.sh 
関連する問題