java.lang.Process是否可以从另一个java.lang.Process继承环境变量?

时间:2010-03-26 21:04:41

标签: java groovy

我正在尝试使用groovy在unix上执行shell脚本编写,但是我没有任何运气让一个进程保留由另一个进程更改的环境变量。例如,

    def p1 = ["bash", "-c", "source /some/setEnv.sh"].execute()

现在,我想要第二个进程p2继承p1中设置的环境变量。我怎样才能做到这一点?我没有在java.lang.Process或它的groovy扩展中看到任何东西,它会在进程执行后吐出环境变量。

2 个答案:

答案 0 :(得分:1)

没有。您需要从第一个进程执行第二个进程(即设置环境变量的进程)。

你有没有想过

  1. 在第二个进程中嵌入设置env变量的脚本吗?
  2. 获取设置环境变量的第一个进程,将它们转储出来,让Java进程读取它们并在调用第二个进程时设置变量(通过Runtime.exec)。

答案 1 :(得分:1)

如果必须在shell脚本中定义环境变量,请执行以下操作:

def p = ["bash", "-c", "source /some/setEnv.sh ; somecmd /foo/bar"].execute()

这将使用somecmd定义的环境变量运行/some/setEnv.sh

更复杂的替代方案可能是:

  1. 从Java
  2. 运行bash -c source ; env
  3. 解析上面的输出以提取有效的环境变量并将它们转换为Java环境变量映射。
  4. 使用新环境创建/运行您调用p2的流程。
  5. 重要的是要理解这是UNIX / Linux工作方式的结果,是Java API的缺点。 UNIX / Linux表示环境变量的“范围”是操作系统级进程,并且一个进程无法读取或设置另一个进程的环境变量。环境变量状态从一个进程转移到另一个进程的唯一时间是创建子进程的时间。

相关问题