运行时的 exec() 方法未重定向输出

2022-09-01 20:16:15
Process p = Runtime.getRuntime().exec("sh somescript.sh &> out.txt");

我正在使用Java运行此命令。脚本正在运行,但未将其流重定向到文件。此外,不会创建该文件。out.txt

如果我在 shell 上运行此脚本,则此脚本运行良好。

有什么想法吗?


答案 1

您需要使用 ProcessBuilder 进行重定向。

ProcessBuilder builder = new ProcessBuilder("sh", "somescript.sh");
builder.redirectOutput(new File("out.txt"));
builder.redirectError(new File("out.txt"));
Process p = builder.start(); // may throw IOException

答案 2

运行命令时,没有运行任何 shell,并且任何 shell 命令或函数都不可用。要使用类似的东西,你需要一个shell。你有一个,但你没有把它传递给它。试试吧。&>

Runtime.getRuntime().exec(new String[] { "sh", "somescript.sh &> out.txt" });

推荐