Запускать конвейер команд в Android программно - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь запускать команды в Android программно, и некоторые команды включают каналы.Я использую следующий код:

try {

    // Executes the command.

    Process process = Runtime.getRuntime().exec(command);

    // Reads stdout.
    // NOTE: You can write to stdin of the command using
    //       process.getOutputStream().
    BufferedReader reader = new BufferedReader(
            new InputStreamReader(process.getInputStream()));
    int read;
    char[] buffer = new char[4096];
    StringBuffer output = new StringBuffer();
    while ((read = reader.read(buffer)) > 0) {
        output.append(buffer, 0, read);
    }
    reader.close();

    // Waits for the command to finish.
    process.waitFor();

    return output.toString();
} catch (IOException e) {

    throw new RuntimeException(e);

} catch (InterruptedException e) {

    throw new RuntimeException(e);
}

Это работает для обычных команд, но когда команда представляет собой конвейер, например "cat some-multi-line-file.txt | grep some-search-parameter", он не запускает grep, а просто выводит весь файл.

Как мне запустить конвейеры?

1 Ответ

0 голосов
/ 10 декабря 2018

Я использовал следующий код

String[] cmd = {
  "/system/bin/sh",
  "-c",
  myCmd
};
process = Runtime.getRuntime().exec(cmd);
...