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 解决方案都会太慢......
您可以使用(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
请注意,每当您为导出的变量分配新值时都需要调用。
这是相当笨拙的。很可能有更好的方法来解决您的问题。最明显的方法是让任何使用这些环境变量的命令读取配置文件。