在shell脚本中设置环境变量并在Java程序中访问

时间:2017-11-14 08:21:42

标签: java bash shell unix processbuilder

这个问题是Set environment variable in shell script/access in Java program的后续问题。我试图在运行shell脚本之后在Java中获取环境变量但是无法这样做

Shell脚本:getDetails.sh:

 for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){    
    Fact factdata = postSnapshot.getValue(Fact.class); 
    if(factViewBox.getText().length() > 0 ){
         factViewBox.setText(factViewBox.getText() + "\n" + factdata.getFactDetail());
    }else{
         factViewBox.setText(factdata.getFactDetail());
    }
 }

Java方法:

#!/bin/bash
# File: getDetails.sh
export userDetails="USER123"
# echo "User Details for App :$userDetails"

java方法为环境变量userDetails返回/打印null。

P.S。 - 请注意,此处无法使用InputStream / BufferedReader来读取userDetails,因为回显程序/组织不允许详细信息。

1 个答案:

答案 0 :(得分:4)

bash进程导出环境变量不会使其成为“全局”,这意味着它被继承(复制)到子进程。也就是说,进程由导出它的bash进程运行。

这里的Java是,并且没有(合法的)方法将变量从子进程注入父进程。必须在运行Java之前设置和导出变量。

我建议使用“wrapper”bash脚本,首先导出变量,然后运行Java应用程序。