我正在尝试使用Java的ProcessBuilder
类来执行一个包含管道的命令。例如:
ls -l | grep foo
然而,我收到错误:
ls: |: no such file or directory
其次是:
ls: grep: no such file or directory
即使该命令在命令行中运行良好,我也无法让ProcessBuilder
执行将其输出重定向到另一个的命令。有没有办法实现这个目标?
答案 0 :(得分:55)
这应该有效:
ProcessBuilder b = new ProcessBuilder("/bin/sh", "-c", "ls -l| grep foo");
要执行管道,您必须调用shell,然后在该shell中运行命令。
答案 1 :(得分:5)
最简单的方法是使用命令行作为参数调用shell。毕竟,它是解释“|”的shell意思是“在两个进程之间管道数据”。
或者,您可以单独启动每个进程,并从“ls -l”的标准输出中读取,将数据写入示例中“grep”的标准输入。