我正面临着一个奇怪的问题。 我有一个虚拟机与solaris 11,并试图写一些bash脚本。
如果在shell上,我input:
export TEST=aaa
然后运行:
set
我正确地看到名为TEST的新的环境variables,其值是aaa。 但是,如果我在脚本中做了基本相同的事情。 当脚本终止时,我看不到variables集。 做一个具体的例子,如果在一个文件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没有在shell中设置。 我错过了什么吗? 我试了导出TEST = sss和单独的variables设置/导出没有区别。
导出 – 使variables可用于subprocess,但不能为父进程。
source – 在shell中运行脚本而不创buildsubprocess
对于exalmpe,可以通过写入文件来实现持久variables
#!/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
为了使你的variables可见,你需要输出你的variables的脚本。 见man source 。