2012-05-05 87 views
1

我无法使从脚本内变量的最简单的导出工作在我的bash中 - 我做了什么错误?bash忘记导出变量

文件test.sh

#!/bin/bash 
echo $ttt 
ttt="fffalse" 
export ttt 
echo $ttt 

庆典测试:

[email protected]:~/temp$ export ttt="tttrue" 
[email protected]:~/temp$ ./test.sh 
tttrue 
fffalse 
[email protected]:~/temp$ ./test.sh 
tttrue 
fffalse 
[email protected]:~/temp$ 

编辑:

我从现在的答案都知道,这是行不通的。 - 但是如何才能在进程间记住一个变量?我需要将它存储在一个文件中吗?

+0

+1的称号。坏bash! :))) – yazu

回答

2

./test.sh相同bash test.sh

每个外壳脚本运行,实际上,父壳的subprocess(子过程)。
子进程无法将env-var导出到其父项。


你可以试试这个(在相同的环境中运行):

. test.sh 
+0

“'。test.sh'”实际上是工作 - 谢谢。这是什么意思?那是在当前shell中运行,而不是作为一个孩子? – hpekristiansen

+1

@ Hans-PeterE.Kristiansen'。 test.sh'完全等价于'source test.sh',它只是意味着解释器从'test.sh'获取每行并在当前环境中运行*,就好像您已经将它键入当前脚本*一样。如果您熟悉'C',它与预处理器执行'#include“file.h”'时的操作有些类似。看到这个链接:(http://ss64.com/bash/period.html) – mgilson

3

export在当前过程中工作,任何孩子后来产生;它不跨越流程边界(父母,现有子女,不相关流程)工作。环境就像一个影子参数列表,不像文件系统或邮箱。