使用Java ProcessBuilder执行管道命令

时间:2010-09-23 07:28:48

标签: java command-line

我正在尝试使用Java的ProcessBuilder类来执行一个包含管道的命令。例如:

ls -l | grep foo

然而,我收到错误:

ls: |: no such file or directory

其次是:

ls: grep: no such file or directory

即使该命令在命令行中运行良好,我也无法让ProcessBuilder执行将其输出重定向到另一个的命令。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:55)

这应该有效:

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

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

答案 1 :(得分:5)

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

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