Java 进程 Linux 命令输出重定向

问题描述 投票:0回答:1
我想使用 Java 运行此命令,但当我这样做时,它会在 STDOUT 上显示命令输出,而不是写入文件:

String command = "mycommand &> mycommand.log";
Process.getRuntime().exec(command);

我无法使用
Process.getInputStream()
,因为此命令旨在由另一个 Java 进程执行,并且它们的 Java 实现对用户隐藏,因此重定向必须在命令内进行,而不是使用 Java API。

	

当您在 Java 中运行命令
java linux
1个回答
0
投票
时,它不使用 shell 重定向,而是将参数

&> xx

 传递给 
echo
。您可以通过以下方式确认:
var p = Runtime.getRuntime().exec("/usr/bin/echo &> xx.log");
p.getInputStream().transferTo(System.out);
// PRINTS: "&> xx"

要进行 shell 重定向,您需要启动 shell:
var p = new ProcessBuilder("/bin/bash", "-c", "/usr/bin/echo &> xx.log").redirectErrorStream(true).start();
p.getInputStream().transferTo(System.out);
// DOES NOT PRINT ANYTHING

而是创建一个文件:
xx.log

	

© www.soinside.com 2019 - 2024. All rights reserved.