Como fazer com que os tubos funcionem com Runtime.exec ()?

Considere o seguinte código:

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);
}

A saída do programa é:

/etc:
adduser.co

Quando corro do shell, é claro, ele funciona como esperado:

poundifdef@parker:~/rabbit_test$ ls /etc | grep release
lsb-release

s internets me dizem que, devido ao fato de o comportamento do canal não ser multiplataforma, as mentes brilhantes que trabalham na fábrica Java que produz Java não podem garantir que os tubos funcione

Como posso fazer isso

Não vou fazer toda a minha análise usando construções Java em vez degrep esed, porque se eu quiser alterar o idioma, serei obrigado a reescrever meu código de análise nesse idioma, o que é totalmente inúti

Como posso fazer o Java fazer piping e redirecionamento ao chamar comandos de shel

questionAnswers(3)

yourAnswerToTheQuestion