首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中以编程方式设置Linux环境变量

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

Stack Overflow用户
提问于 2012-12-24 22:19:33
回答 4查看 19.5K关注 0票数 11

我可以通过RunTime类运行Linux命令。有没有一种从Java编程设置Linux全局环境的方法?

我想在Java上模拟以下Linux命令语句

代码语言:javascript
复制
root@machine:/tmp# export TEST=v2

我使用了ProcessBuilder,如下所示,但是测试变量没有改变。

代码语言:javascript
复制
ProcessBuilder pb = new ProcessBuilder("/bin/bash","-c","export TEST=v3" + "&& exec");

更新:实际上我的最终目标是使用EMAIL_NAME环境作为电子邮件地址,当我的应用程序和机器都启动和停止时,这些操作将被发送到EMAIL_NAME。在这种情况下,我理解在纯Java代码上设置linux全局环境是不可能的。所以我有一个变通办法,那就是将EMAIL_NAME保存在一个文件中,并通过linux脚本或java代码对其进行更新或读取。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-24 22:22:10

设置环境变量时,只有设置了该变量的进程才能使用该变量,因此,如果您真的要求设置一个会影响整个系统的变量,那么请不要。在Linux中,你根本不能以交互的方式做到这一点。最好的做法是修改其中一个系统启动文件,使其包含所述变量,以便将来执行的任何操作都包含该变量。

如果您只是想通过设置一些变量来运行多个进程,那么ProcessBuilder允许您对使用它产生的进程执行set an environment。将一个环境重用于多个进程是相当简单的。

票数 10
EN

Stack Overflow用户

发布于 2012-12-24 22:24:59

当你说"Linux全局环境“时,你是指Linux环境变量吗?如果是这样,我认为答案是否定的。因为这不是java的问题。当一个进程设置了环境变量时,它只能影响它自己及其子进程。

票数 3
EN

Stack Overflow用户

发布于 2012-12-24 23:04:31

您可以通过java将变量更新到/etc/profile中

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14022487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档