15

環境変数として設定する必要があるいくつかの変数を含むスクリプトがあります

変数のリストは常に変更されており、自分で変更することはできません。どうやってそれをやろうか考えていますか?

サンプルファイル foo.sh

FOO="FOOFOO"
BAR="BARBAR"
4

3 に答える 3

41

変数と環境変数には違いがあります。行を実行. foo.shしてfoo.sh含む場合FOO=value、変数FOOは現在のプロセスで割り当てられます。これは環境変数ではありません。環境変数になる(したがってサブシェルで使用できる)には、エクスポートする必要があります。ただし、シェルには、すべての変数割り当てが変数を環境変数にプロモートするオプションが用意されているため、次のようにします。

set -a
. foo.sh
set +a

次に、foo.sh内のすべての変数割り当ては、現在のプロセスで環境変数になります。これは厳密には当てはまらないことに注意してください。bashでは、変数をエクスポートすると現在のシェルの環境変数になりますが、他のシェル(ダッシュなど)では、変数をエクスポートしても現在のシェルの環境変数にはなりません。(ただし、サブシェルの環境で設定されます。)ただし、シェルのコンテキストでは、変数が現在のプロセスの環境変数であるかどうかは実際には問題ではありません。エクスポートされる場合(したがって、サブプロセスの環境に設定される場合)、環境にない変数は、機能的には環境変数と同等です。

于 2013-02-16T02:09:33.860 に答える
10

「.」をお探しですか?コマンド ( では「ソース」とも綴られていますbash):

source foo.sh

それらを環境にもエクスポートする必要があるため、少し追加の作業が必要になる場合があります。

while read -r line; do
    export "$line"
done < foo.sh
于 2013-02-15T22:09:29.133 に答える
-1

共通の接頭辞を持つ変数のみをエクスポートする場合:

BAZ_FOO="FOOFOO"
BAZ_BAR="BARBAR"

これを簡単に行うことができます:

. foo.sh
variable_list=()
variable_list=( $(set -o posix ; set  |\
                  grep "BAZ_"         |\
                  cut -d= -f1) )
for variable in "${variable_list[@]}"
do
  export "$variable"
done
于 2015-11-23T12:05:23.330 に答える