Канал (например, перенаправление или >
) является функцией оболочки, поэтому выполнение его непосредственно из Java не будет работать.Вам нужно сделать что-то вроде:
/bin/sh -c "your | piped | commands | here"
, который выполняет процесс оболочки в командной строке (включая каналы), указанной после -c
(в кавычках).
Итак, вотпример кода, который работает в моей ОС Linux.
public static void main(String[] args) throws IOException {
Runtime rt = Runtime.getRuntime();
String[] cmd = { "/bin/sh", "-c", "ps aux | grep skype" };
Process proc = rt.exec(cmd);
BufferedReader is = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line;
while ((line = is.readLine()) != null) {
System.out.println(line);
}
}
Здесь я извлекаю все процессы «Skype» и распечатываю содержимое потока ввода процесса.