2012-05-05 92 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在當前過程中工作,任何孩子後來產生;它不跨越流程邊界(父母,現有子女,不相關流程)工作。環境就像一個影子參數列表,不像文件系統或郵箱。