在Java中以编程方式设置Linux环境变量

时间:2012-12-24 14:19:33

标签: java linux

我可以通过RunTime课程运行Linux命令。 有没有办法以编程方式从Java设置Linux全局环境?

我想通过Java

模拟以下Linux命令语句
root@machine:/tmp# export TEST=v2

我已经使用了ProcessBuilder,但是TEST变量没有改变。

ProcessBuilder pb = new ProcessBuilder("/bin/bash","-c","export TEST=v3" + "&& exec");

更新: 实际上,我的最终目标是将EMAIL_NAME环境用作电子邮件地址,当我的应用程序和计算机都启动并停止时,这些操作将发送给EMAIL_NAME。 在这种情况下,我理解不可能在纯Java代码上设置linux全局环境。所以我有一个解决方案是EMAIL_NAME将保存在一个文件中,它将被linux脚本或java代码更新或读取。

4 个答案:

答案 0 :(得分:10)

环境变量在设置时仅适用于设置变量的进程生成的进程,因此如果您真的要求设置一个影响整个系统的变量,那么不。你不能在Linux中以交互方式真正做到这一点。您可以做的最好的事情是更改其中一个系统启动文件以包含所述变量,以便您在 future 中执行的任何操作都包含该变量。

如果您只是想要使用某个变量集运行多个进程,那么ProcessBuilder允许您set an environment使用它生成的进程。对于多个流程重用环境非常简单。

答案 1 :(得分:3)

当你说“Linux全球环境”时,你的意思是Linux环境变量吗?如果是这样,我认为答案是否定的。因为它不是java问题。当进程设置环境var时,它只能影响自身及其子进程。

答案 2 :(得分:1)

您可以通过java

将变量更新到/ etc / profile中
if(System.getProperty("TEST", "").equalsIgnoreCase(""))
{
    Runtime.getRuntime().exec(new String[]{"bash","-c" ,"echo 'export TEST=v2' >> /etc/profile"}) ;

    /// Also update the System Variable for current process
    System.setProperty("TEST","v2") ;
}

这将从下次登录时生效,或者如果您明确地获取它。

答案 3 :(得分:-2)

我在bash中使用这行代码

echo -e PATH=\"/usr/lib/jvm/java-7-openjdk-i386/bin:\$PATH\" >> $HOME/.profile

连接本地用户的路径