кто-нибудь знает, как использовать 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"
Наконец я пытаюсь выполнить команду в оболочке и получаю:
sing
хотя почему-то красным шрифтом. Так что я делаю неправильно?
<<<
указывает оболочке передать все, что следует, в качестве входного потока для grep. Ваш код ProcessBuilder обрабатывает символы входного потока как еще один аргумент. - person Brian   schedule 31.01.2015