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

Posted

技术标签:

【中文标题】在 Posix 中将 Shell 上下文变量传递给编译语言 (Java/C/C++)【英文标题】:Passing Shell Context Variables to Compiled Language (Java/C/C++) in Posix 【发布时间】:2015-12-01 15:17:46 【问题描述】:

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

我正在运行一个 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 整个环境变量外壳。

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

感谢任何人的帮助:)

【问题讨论】:

【参考方案1】:

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

VARIABLE_NAME="somevalue" java Main

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

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

【讨论】:

好吧,我只是想让你知道这行得通(!)但 *** 不会让我在这么短的时间内接受你的回答。非常感谢您的回答和如此迅速的回答。您将在几分钟内收到一张绿色支票。

以上是关于在 Posix 中将 Shell 上下文变量传递给编译语言 (Java/C/C++)的主要内容,如果未能解决你的问题,请参考以下文章

POSIX中shell下的常用变量结束状态和test表达式

在Django中将上下文从子模板传递给父模板

为啥我不能在 Ruby 中将块传递给 proc?

如何在脚本中将变量传递给总计

如何在 Rails 视图中将 Ruby 变量传递给 JavaScript 函数?

在 append() 中将 Javascript 变量传递给 HTML 代码