スクリプトの実行後にエクスポートされた変数が保持されない


8

私は奇妙な問題に直面しています。私は、solaris 11を備えたvmを使用しており、bashスクリプトを作成しようとしています。

シェルで次のように入力すると、

export TEST=aaa

次に実行します:

set

値がaaaであるTESTという名前の新しい環境変数が正しく表示されます。ただし、スクリプトで基本的に同じことを行う場合。スクリプトが終了すると、変数セットが表示されません。具体的な例を作るために、ファイルtest.shにある場合:

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
echo 2: $USER
TEST=sss
echo 3:  $TEST
export TEST
echo 4:  $TEST

それは印刷します:

1:
2: daniele
3: sss
4: sss

実行後、TESTはシェルに設定されません。何か不足していますか?エクスポートTEST = sssと別の変数set / exportの両方を実行して、違いはありません。

回答:


15

export-変数を子プロセスで使用できるようにしますが、親プロセスでは使用できません。

ソース-子プロセスを作成せずにシェルでスクリプトを実行する

例として、永続変数はファイルに書き込むことで実現できます

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
CONFIGFILE=~/test-persistent.vars
if [ -r ${CONFIGFILE} ]; then
  # Read the configfile if it's existing and readable
  source ${CONFIGFILE}
fi
echo 2: $TEST
echo 3: $USER
TEST=sss
echo 4:  $TEST
echo TEST="$TEST"> ${CONFIGFILE}
echo 5:  $TEST

これも正確に私が達成したかったことではありませんが、私はあなたの主張を理解しました。ありがとう。
ダニエレ

5

変数を表示するには、変数sourceをエクスポートするスクリプトが必要です。を参照してくださいman source


1
おそらくソースのマンページがないので、help source代わりにbashを使いたいでしょう。
シチュー

これは、スクリプトを直接呼び出した場合(つまり、シェルからエクスポートしたスクリプトをソースとした場合)には機能しますが、別のスクリプト内からスクリプトをソースした場合は機能しないようです。
ダニエレ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.