Рассмотрим следующий код:
String commandf = "ls /etc | grep release";
try {
// Execute the command and wait for it to complete
Process child = Runtime.getRuntime().exec(commandf);
child.waitFor();
// Print the first 16 bytes of its output
InputStream i = child.getInputStream();
byte[] b = new byte[16];
i.read(b, 0, b.length);
System.out.println(new String(b));
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}
Вывод программы:
/etc:
adduser.co
Когда я запускаюсь из оболочки, конечно, он работает как ожидалось:
[email protected]:~/rabbit_test$ ls /etc | grep release
lsb-release
Интернеты говорят мне, что из-за того, что поведение труб не является кросс-платформенным, блестящие умы, которые работают на Java Java factory, не могут гарантировать работу труб.
Как я могу это сделать?
Я не буду выполнять весь мой синтаксический анализ, используя конструкторы Java, а не grep
и sed
, потому что, если я хочу изменить язык, я буду вынужден повторно написать мой синтаксический код на этом языке, что совершенно не имеет значения.
Как я могу заставить Java выполнять переадресацию и перенаправление при вызове команд оболочки?