bash中子进程之间的变量泄漏

时间:2014-03-06 19:58:20

标签: bash variables export parent-child handle-leak

大家都在stackoverflow我遇到了一个问题,一个bash脚本作为一个孩子运行,与我的父脚本存在可变冲突。我有一个子进程启动并从父进程中提取变量。我所经历的是,在每一个儿童进程中,每秒都会同时运行儿童之间的变量交叉。例如UnitIP UnitPort和Unitname都是从和数组中定义的,但是当下一个孩子打开时,另一个孩子也会收到对unitip unitPort等所做的更改......任何人都有解决这个问题的方法吗?所以我们说UnitIP = $ {IP [0]}子打开UnitIP = $ {IP [0]},循环返回UnitIP = $ {IP [1]}第二个子打开UnitIP = $ {IP [1 ]}并且第一个孩子也改为UnitIP = $ {IP [1]}感谢您的时间和帮助。

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

2 个答案:

答案 0 :(得分:1)

(未经测试)您可以为每个孩子创建一个子shell,这样他们就不会共享相同的 parent 环境:

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

答案 1 :(得分:0)

只需为一个命令设置变量:

UnitIP=xyz subprocess &