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
このプロセスの変数を設定しただけでエラーが発生する理由がわかりません。ProcessBuilderで使用できるようにenv変数を設定する方法を教えてください。