Java中的ProcessBuilder环境变量

我正在尝试为ProcessBuilder对象添加环境变量,但是当我在ProcessBuilder中调用该新变量时,出现错误。这就是我建立流程的方式

public class OTU

{

public static void main(String[] args) throws Exception

{

ProcessBuilder pb = new ProcessBuilder();

Map<String, String> env = pb.environment();

//set environment variable u

env.put("u", "util/");

pb.command("echo $u");

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();

}

}

我得到了错误

Exception in thread "main" java.io.IOException: Cannot run program "$u": java.io.IOException: error=2, No such file or directory

at java.lang.ProcessBuilder.start(ProcessBuilder.java:475)

at ca.utoronto.siseq_1_2.OTU.main(OTU.java:22)

Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory

at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)

at java.lang.ProcessImpl.start(ProcessImpl.java:81)

at java.lang.ProcessBuilder.start(ProcessBuilder.java:468)

... 1 more

我不明白,如果我只是为此过程设置变量,为什么会出现错误。请帮助我如何设置env变量,以便可以在ProcessBuilder中使用它。

回答:

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=0

Standard Output:

util/

Standard Error:

以上是 Java中的ProcessBuilder环境变量 的全部内容, 来源链接: utcz.com/qa/419340.html

回到顶部