2016-06-06 5 views
0

Warum wird der folgende Code falsch gedruckt? Ich versuche eine Umgebungsvariable im Skript test.sh und sammle sie in Java. Bitte schlagen Sie einen alternativen Ansatz vor, wenn möglich.Sammeln Umgebungsvariable in Java nach dem Ausführen von Skript über ProcessBuilder

public static void main(String[] args){ 
ProcessBuilder processBuilder = new ProcessBuilder("test.sh"); 
Process process; 
int exitCode; 
try { 
    process = processBuilder.start(); 
    exitCode = process.waitFor(); 
} catch (IOException e) { 
     e.printStackTrace();    
    } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
     e.printStackTrace();    
    } 
Map<String, String>envVars = processBuilder.environment(); 
System.out.println(envVars.keySet().contains("SOURCE")); 
} 

Und der Code für test.sh Skript ist einfach

set SOURCE=source 
+0

Ich denke, es sollte 'EXPORT SOURCE = source' sein, wenn Sie in * nix Umgebung –

+0

Export versucht haben, hat nicht funktioniert –

Antwort

1

Die ProcessBuilder.environment() Methode wird verwendet, um den Eingang zu passieren Itiale Umgebung zu dem Prozess, wenn Sie start() aufrufen. Sie können die Umgebung eines Subprozesses nicht von einem übergeordneten Prozess abrufen. Dies ist keine Java-Einschränkung: Sie können nicht einmal eine Subprozessumgebung von einem Bash-Shell-Skript (oder tatsächlich von irgendetwas) abrufen, das einen Subprozess erstellt. Sie müssen ein anderes Mittel finden, um Informationen vom Subprozess zurück zum übergeordneten Prozess zu übertragen.

0

Meiner Meinung nach, sollten Sie ändern:

ProcessBuilder processBuilder = new ProcessBuilder("test.sh"); 

zu

ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "test.sh"); 
processBuilder.directory(new File(the-dir-of-test.sh));