如何在块(bash(中导出脚本中的分叉变量
如果您使块组中的一个变量分叉,如何取回该变量?
unset VAR; { VAR=$( echo "AAAA" ) ;} & PID=$!; echo "[$PID - $VAR]";
只返回PID
[31270 - ]
如何在没有外部文件的情况下??
简短的回答:你不能——这是不可能的。
一旦子shell{ VAR=$( echo "AAAA" ) ;}
与&
分叉,它就是一个单独的进程,即子进程。它继承了原始shell中所有变量的副本,但对这些变量的任何或更改,或它创建的新变量,都保留在子shell中,原始(父(shell看不到。更重要的是,由于您没有等待孩子完成,因此无法保证孩子甚至会在家长想要使用变量时设置变量。
将数据从子级返回到父级的唯一方法是让进程进行通信,这被称为进程间通信(IPC(。有很多方法可以做到这一点,具有不同的特性,因此对于不同的任务(以及在shell中使用(具有不同的适用性。
你说你不想使用文件或管道。我不确定为什么会这样(如果你在问题中说的话会很有帮助(,但IPC的其他方法包括:
- 套接字(unix域、TCP等(
- FIFOs
- 共享内存
- 信号
- 消息队列
- ptrace
- 等等
选择一个:(