ProcessBuilder重定向输出

Cha*_*dra 3 java process processbuilder

我试图使用以下代码重定向在ProcessBuilder的帮助下启动的进程的输出

ProcessBuilder pb = new ProcessBuilder("/myScript >> /myLogFile 2>&1 <& - &");
Map<String, String> env = pb.environment();
env.clear();
env.put("var1", "val1");
env.put("var2", "val2");
pb.redirectErrorStream(true);
Process p = pb.start();
Run Code Online (Sandbox Code Playgroud)

但它失败了,例外

线程"main"中的异常java.io.IOException:无法运行程序"/ myScript >>/myLogFile 2>&1 <& - &":java.io.IOException:error = 2,java.lang上没有这样的文件或目录.ProcessBuilder.start(ProcessBuilder.java:460)

当我传递"/ myScript"时,它工作正常

脚本是perl,有关它为什么失败的任何建议/评论?

我尝试将所有这些作为单独的参数传递,例如new ProcessBuilder("/myScript",">>","/myLogFile"),它执行但它不会重定向到日志文件,也不会使用envVars.

tra*_*god 6

Shell重定向运算符不为人知ProcessBuilder.把你的命令在shell脚本并执行它,如图所示这里.另外,使用bash -c,如图所示这里.

  • 是的,谢谢,看起来Java 7将具有明确指定重定向的能力. (2认同)