是否可以在子shell中修改父变量?

时间:2012-06-13 15:23:00

标签: linux bash shell

以下是一个例子:

bash-4.2$ export i=0
bash-4.2$ while :; do let i=i+1; done &
[1] 29668
bash-4.2$ echo $i
0
bash-4.2$ kill %1
bash-4.2$ exit

在这里,我开始的工作不断增加$i,但仅作为局部变量。我知道在bash中没有指针或引用这样的东西,所以我的问题是如何做到这一点?

如果可能以某种方式,那么这意味着可以同时在多个线程中访问和写入一个变量,这就是我想要实现的目标。有没有办法防止内存读取/写入问题,如关键部分(在shell / bash中)?

3 个答案:

答案 0 :(得分:2)

Bash 4支持coprocesses,这只是一种使用双向管道的幕后方法。

答案 1 :(得分:1)

Bash没有线程,进程不共享内存。子shell仍然是不同的进程 - 它们从父级继承它们的状态,但是它们没有共享数据。

父级可以读取子shell或其他进程的输出,然后更改自己的状态,但是孩子无法直接执行此操作。

答案 2 :(得分:0)

首先,这些不是线程,它们是进程。孩子改变父进程的变量没有直接的方法(我知道的唯一方法是将C程序作为调试器附加)。

最好使用管道(可能是命名管道)将数据传回给调用者。