如何在 shell 之间共享环境变量,如与主 pid 相关的全局变量?

Aqu*_*wer 8 shell-script environment-variables dynamic-linking

因此,我需要在 shell 之间共享环境变量,并且所有 shell 都可以及时识别变量的更改,例如全局变量。但它们必须与主 PID 相关,因此我可以运行 2 个 shell 脚本,每个脚本都是具有相同全局变量名称的主控,它的子级只会更改与其主 PID 相关的变量。

bash用于编写脚本。

我目前的研究是这些:


我读过的模块我可以使用模块项目:http://modules.sourceforge.net/,但我在尝试这样做时遇到了巨大的麻烦,它似乎缺乏示例?“模块”也是一个太笼统的词,很难用谷歌搜索,因为它与许多其他东西混合在一起……几周后我的手还是空的……


我也读过的简单文本源文件我应该使用一个简单的文本文件来存储/更新/读取变量,作为源脚本文件,使用flock太以避免并发写入。但是存在与此相关的问题,例如 2 个 shell 同时并发更改变量。

或者,
我知道在 shell 读取“全局”变量后,它将保留该值,直到进行另一次读取;另一个shell也可能同时改变它......
可能是一个非常快的外部应用程序可以提供这样的存储,然后我们不会尝试使用环境变量作为全局变量?但我的猜测是任何 SQL 解决方案都会太慢......

Gil*_*il' 5

您可以使用(include 命令)将环境写入文件并export -p在其他实例中定期读回。.但正如您所注意到的,如果存在并发修改,结果将不会很好。

如果您希望修改立即传播,则必须在export内置函数周围使用包装器,该包装器也将更改传播到其他 shell。在 Linux 上,您可以使用该flock实用程序。

global_export () {
  {
    flock 0
    . /path/to/env
    [ $# -eq 0 ] || export "$@"
    export -p >/path/to/env
  } </path/to/env
}
Run Code Online (Sandbox Code Playgroud)

global_export请注意,每当您为导出的变量分配新值时都需要调用。

这是相当笨拙的。很可能有更好的方法来解决您的问题。最明显的方法是让任何使用这些环境变量的命令读取配置文件。