在 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++)的主要内容,如果未能解决你的问题,请参考以下文章