我可以通过RunTime类运行Linux命令。有没有一种从Java编程设置Linux全局环境的方法?
我想在Java上模拟以下Linux命令语句
root@machine:/tmp# export TEST=v2我使用了ProcessBuilder,如下所示,但是测试变量没有改变。
ProcessBuilder pb = new ProcessBuilder("/bin/bash","-c","export TEST=v3" + "&& exec");更新:实际上我的最终目标是使用EMAIL_NAME环境作为电子邮件地址,当我的应用程序和机器都启动和停止时,这些操作将被发送到EMAIL_NAME。在这种情况下,我理解在纯Java代码上设置linux全局环境是不可能的。所以我有一个变通办法,那就是将EMAIL_NAME保存在一个文件中,并通过linux脚本或java代码对其进行更新或读取。
发布于 2012-12-24 22:22:10
设置环境变量时,只有设置了该变量的进程才能使用该变量,因此,如果您真的要求设置一个会影响整个系统的变量,那么请不要。在Linux中,你根本不能以交互的方式做到这一点。最好的做法是修改其中一个系统启动文件,使其包含所述变量,以便将来执行的任何操作都包含该变量。
如果您只是想通过设置一些变量来运行多个进程,那么ProcessBuilder允许您对使用它产生的进程执行set an environment。将一个环境重用于多个进程是相当简单的。
发布于 2012-12-24 22:24:59
当你说"Linux全局环境“时,你是指Linux环境变量吗?如果是这样,我认为答案是否定的。因为这不是java的问题。当一个进程设置了环境变量时,它只能影响它自己及其子进程。
发布于 2012-12-24 23:04:31
您可以通过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") ;
}这将从下一次登录开始生效,或者如果您明确提供它的话。
https://stackoverflow.com/questions/14022487
复制相似问题