Как скопировать потоки ввода / вывода процесса в их системные аналоги?

Это продолжение этого вопроса . Предлагается ответ

для копирования потоков обработки, ошибок и ввода в версии системы

с помощью IOUtils.copy следующим образом (после исправления различных ошибок компиляции):

import org.apache.commons.io.IOUtils;
import java.io.IOException;

public class Test {
    public static void main(String[] args)
            throws IOException, InterruptedException {
        final Process process = Runtime.getRuntime().exec("/bin/sh -i");
        new Thread(new Runnable() {public void run() {
            try {
                IOUtils.copy(process.getInputStream(), System.out);
            } catch (IOException e) {}
        } } ).start();
        new Thread(new Runnable() {public void run() {
            try {
                IOUtils.copy(process.getErrorStream(), System.err);
            } catch (IOException e) {}
        } } ).start();
        new Thread(new Runnable() {public void run() {
            try {
                IOUtils.copy(System.in, process.getOutputStream());
            } catch (IOException e) {}
        } } ).start();
        process.waitFor();
    }
}

Однако полученный код не t работают для интерактивных процессов, таких как выполнение команды sh -i . В последнем случае нет ответа ни на одну из команд sh .

Мой вопрос: не могли бы вы предложить альтернативу для копирования потоков, которая будет работать с интерактивными процессами?

7
задан Community 23 May 2017 в 11:54
поделиться