Alfredo O的示例为您提供了正确的想法。您需要告诉ProcessBuilder使用哪个程序来执行命令。在这种情况下,bash带有“
-c”开关,它告诉bash将下一个命令(即“ echo $ u”)解释为命令。
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(); }}这将产生以下输出:
Process ended with rc=0Standard Output:util/Standard Error:



