使用 Java ProcessBuilder 执行管道命令

2022-09-01 04:18:19

我正在尝试使用Java的类来执行其中有管道的命令。例如:ProcessBuilder

ls -l | grep foo

但是,我收到一个错误:

ls: |: no such file or directory

其次:

ls: grep: no such file or directory

即使该命令从命令行完美地工作,我也无法执行将其输出重定向到另一个命令的命令。ProcessBuilder

有没有办法做到这一点?


答案 1

这应该有效:

ProcessBuilder b = new ProcessBuilder("/bin/sh", "-c", "ls -l| grep foo");

若要执行管道,必须调用一个 shell,然后在该 shell 中运行命令。


答案 2

最简单的方法是使用命令行作为参数调用 shell。毕竟,它是 shell 将“|”解释为“在两个进程之间传输数据”。

或者,您可以单独启动每个进程,并从“ls -l”的标准输出中读取,将数据写入示例中“grep”的标准输入。


推荐