运行命令时
/usr/bin/echo &> xx
在Java中,它不使用shell重定向,而是传递参数
&> xx
到
echo
。您可以通过以下方式进行确认:
var p = Runtime.getRuntime().exec("/usr/bin/echo &> xx.log");
p.getInputStream().transferTo(System.out);
// PRINTS: "&> xx"
在您的案例中,“mycommand”以参数“&>mycommand.log”运行。相反,您需要运行一个shell来进行任何shell重定向处理,最好使用
ProcessBuilder
:
// test with: String command = "/usr/bin/echo &> xx.log";
var p = new ProcessBuilder("/bin/bash", "-c", command).redirectErrorStream(true).start();
p.getInputStream().transferTo(System.out);
// DOES NOT PRINT ANYTHING
上面创建了一个文件:
xx.log
-在本例中包含一个空行
回响
.