2014-03-06 37 views
1

您好每個人都在stackoverflow我有一個問題,作爲一個兒童與我的父母腳本變量衝突運行的bash腳本。我有一個子進程啓動並從父節點拉變量。我所做的是,在每一個同時運行的子進程中,每個孩子之間的變化交叉。例如UnitIP UnitPort和Unitname都是從數組和數組中定義的,但是當下一個孩子打開時,另一個孩子也會接收對unitip unitPort等所做的更改......任何人都可以爲此問題找到解決方案?所以假設UnitIP = $ {IP [0]}孩子以UnitIP = $ {IP [0]}打開,循環返回到UnitIP = $ {IP [1]}周圍,第二個孩子以UnitIP = $ {IP [1]打開]}並且第一個孩子也改變爲UnitIP = $ {IP [1]},感謝您的時間和幫助。bash中的子進程之間的變量泄漏

for ((c=0; c<=$id-1; c++)) 
do 
t8=$t 
export t=$t8 
export UnitIP=${IP[$c]} 
export UnitPort=${Port[$c]} 
export UnitName=${Name[$c]} 
export UnitActive=${Active[$c]} 
subsprogram.sh & 
done 
+0

你可以發佈一個'subprogram.sh'的例子,它實際上表現出這種行爲嗎? – chepner

回答

1

(未經測試),你可以爲每個孩子創建一個子shell所以他們不共享相同的 環境:

for ((c=0; c<=$id-1; c++)) 
do 
    t8=$t 
    (
     export t=$t8 
     export UnitIP=${IP[$c]} 
     export UnitPort=${Port[$c]} 
     export UnitName=${Name[$c]} 
     export UnitActive=${Active[$c]} 
     subsprogram.sh & 
    ) 
done 
+0

我喜歡這個解決方案我會試試 – Cfoote7

+0

工作,謝謝 – Cfoote7

+0

我想技術上他們會分享同一個父母,但他們不會分享他們共同的父母的環境 - 說迂迴老傻瓜Setchell :-) –

0

只需設置變量的一個命令:

UnitIP=xyz subprocess & 
+0

其實原來我有subprocess $ c&然後ip,端口,名稱和活動被定義在子進程中,但$ c的值仍然在我的子進程內不斷移動,因爲下一個子進程打開 – Cfoote7

+0

或者把它們全部放在一個子shell中這() –