我正在尝试使用groovy在unix上执行shell脚本编写,但是我没有任何运气让一个进程保留由另一个进程更改的环境变量。例如,
def p1 = ["bash", "-c", "source /some/setEnv.sh"].execute()
现在,我想要第二个进程p2继承p1中设置的环境变量。我怎样才能做到这一点?我没有在java.lang.Process或它的groovy扩展中看到任何东西,它会在进程执行后吐出环境变量。
答案 0 :(得分:1)
没有。您需要从第一个进程执行第二个进程(即设置环境变量的进程)。
你有没有想过
答案 1 :(得分:1)
如果必须在shell脚本中定义环境变量,请执行以下操作:
def p = ["bash", "-c", "source /some/setEnv.sh ; somecmd /foo/bar"].execute()
这将使用somecmd
定义的环境变量运行/some/setEnv.sh
。
更复杂的替代方案可能是:
bash -c source ; env
p2
的流程。重要的是要理解这是UNIX / Linux工作方式的结果,不是Java API的缺点。 UNIX / Linux表示环境变量的“范围”是操作系统级进程,并且一个进程无法读取或设置另一个进程的环境变量。环境变量状态从一个进程转移到另一个进程的唯一时间是创建子进程的时间。