ProcessBuilder environment variable in java ProcessBuilder environment variable in java unix unix

ProcessBuilder environment variable in java


Alfredo O's example gives you the right idea. You need to tell the ProcessBuilder what program to use to execute your command. In this case bash with the "-c" switch, which tells bash to interpret what comes next (i.e. "echo $u") as a command.

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Map;public class OTU {    public static void main(String[] args) throws Exception {        ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "echo $u");        Map<String, String> env = pb.environment();        // set environment variable u        env.put("u", "util/");        Process p = pb.start();        String output = loadStream(p.getInputStream());        String error = loadStream(p.getErrorStream());        int rc = p.waitFor();        System.out.println("Process ended with rc=" + rc);        System.out.println("\nStandard Output:\n");        System.out.println(output);        System.out.println("\nStandard Error:\n");        System.out.println(error);    }    private static String loadStream(InputStream s) throws Exception {        BufferedReader br = new BufferedReader(new InputStreamReader(s));        StringBuilder sb = new StringBuilder();        String line;        while ((line = br.readLine()) != null)            sb.append(line).append("\n");        return sb.toString();    }}

This produces the following output:

Process ended with rc=0Standard Output:util/Standard Error:


This works for me in Windows:

@Testpublic void testProcessBuilder() throws IOException {    ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/C", "echo Hello %name%");    Map<String, String> environment = processBuilder.environment();    environment.put("name", "Alfredo Osorio");    Process p = processBuilder.start();    String line;    BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));    while ((line = r.readLine()) != null) {        System.out.println(line);    }    r.close();}

Output:

Hello Alfredo Osorio

As you can see in Windows you use the %environmentVariable% instead of the $environementVariable