【发布时间】:2025-12-28 16:15:10
【问题描述】:
有谁知道如何将 linux grep 与 java ProcessBuilder 一起使用?为什么这段代码应该返回“sing”时返回一个空字符串?
import java.io.*;
import java.util.*;
public class Test2 {
public static void main(String[] args) throws InterruptedException,IOException{
String line;
// Initiate grep process.
ProcessBuilder pb = new ProcessBuilder("grep", "\"sing\"", "<<<\"sing\"");
Process p = pb.start();
p.waitFor();
// Get grep output:
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuilder builder = new StringBuilder();
line = null;
while ( (line = reader.readLine()) != null) {
builder.append(line);
builder.append(System.getProperty("line.separator"));
}
String result = builder.toString();
System.out.println(result);
}
}
我也尝试回显我用这段代码执行的内容:
ProcessBuilder pb = new ProcessBuilder("echo","grep", "\"sing\"", "<<<\"sing\"");
并得到正确的结果:
grep "sing" <<<"sing"
我终于尝试在shell执行命令并得到:
sing
虽然出于某种原因它是红色字体。那我做错了什么?
【问题讨论】:
-
在您的示例中,grep 采用一个参数(sing),
<<<符号告诉 shell 将后面的任何内容作为输入流传递给 grep。您的 ProcessBuilder 代码将输入流符号视为另一个参数。
标签: java shell grep processbuilder herestring