首页 > 解决方案 > 脚本 - 函数脚本可见性中的分叉(背景)变量

问题描述

如何在块(bash)中的脚本中导出分叉变量?

如果你在块组中创建一个变量 forked,如何取回变量?

unset VAR; { VAR=$( echo "AAAA" ) ;} & PID=$!; echo "[$PID - $VAR]";

只返回PID

[31270 - ]

没有外部文件怎么办?

标签: bashmacosshell

解决方案


简短的回答:你不能 - 这是不可能的。

一旦 subshel​​l{ VAR=$( echo "AAAA" ) ;}被分叉出来&,它就是一个单独的进程,即进程。它继承了原始 shell 中所有变量的副本,但对这些变量或它创建的新变量的任何或更改都保留在子 shell 中,并且原始(父)shell 无法看到。更重要的是,由于您没有等待孩子完成,因此无法保证孩子甚至会在父母想要使用它的时候设置变量。

将数据从子进程返回给父进程的唯一方法是让进程进行通信——这称为进程间通信 (IPC)。有许多方法可以做到这一点,具有不同的特性,因此对不同任务(以及在 shell 中使用)的适用性不同。

你说你不想使用文件或管道。我不确定为什么会这样(如果您在问题中说会有所帮助),但 IPC 的其他方法包括:

  • 套接字(unix 域、TCP 等)
  • 先进先出
  • 共享内存
  • 信号
  • 消息队列
  • 跟踪
  • ETC...

选一个 :)


推荐阅读