在 Posix 中将 Shell 上下文变量传递给编译语言 (Java/C/C++)

Passing Shell Context Variables to Compiled Language (Java/C/C++) in Posix

这是一个非常简单的问题,但我一直找不到答案。

我正在 运行 编写一个 shell 脚本,并且在该 shell 脚本的范围内我已经定义了一些变量。我想以某种方式从 shell 脚本上下文中的程序 运行 中访问这些变量。例如,如果我 运行 一个看起来像

的脚本
#!/bin/sh

VARIABLE_NAME="somevalue";
java Main;
./compiled-c-or-cpp.out

如何从 Main 或已编译的 C/C++ 中访问 "$VARIABLE_NAME"?老实说,如果这是不可能的,我不会感到惊讶,但我认为这是一个值得提出的问题。

我认为我不能为此使用环境变量。 我知道如何通过 Java的System.getEnv("VARIABLE_NAME")方法和C的getenv("VARIABLE_NAME")方法。但是,我最终实现的过程将用于 very 多线程应用程序。我需要能够使用 context 变量,这样我就可以让多个线程同时访问它们自己的 "$VARIABLE_NAME",而不是 export-ing环境变量到全shell.

也就是说,我承认我对环境变量的范围没有完全的了解。例如,如果每次调用 Runtime.getRuntime().exec("./script.sh")(对于 Java)或 system("./script.sh")(对于 C/C++)都分配了自己的 shell,并且如果我能够将 export 环境变量仅更改为临时 shell,那么这将是一个可以接受的解决方案。

感谢任何人的帮助:)

您可以将一个环境变量导出到一个进程,而无需在您的 shell:

VARIABLE_NAME="somevalue" java Main

在你的情况下,它更可能是这样的

VARIABLE_NAME="somevalue" (java Main; ./compiled-c-or-cpp.out)