2014-02-17 4 views
1

Я ранее задавал один и тот же вопрос, но без ответа, и нашел некоторые другие вопросы, подобные этой проблеме here и here, но опять же без соответствующих ответов. Может кто-нибудь, пожалуйста, помогите мне с этим. Я пытаюсь открыть оболочку из Java и взаимодействовать с ней (написать команды и прочитать вывод оболочки). Команды будут заданы пользователем, как изменение каталога, компиляция программы на языке C и т. Д. Список команд не является фиксированным.открытие оболочки и взаимодействие с использованием Java

Я также пробовал и использовал метод/bin/bash -c и следующее.

Process p = new ProcessBuilder("xterm").start(); 

Process p = new ProcessBuilder("/bin/bash").start(); 

Спасибо, и я надеюсь, что проблема ясна.

+0

Если ваша Java программа будет «директор» для оболочки выполняется, или он предназначен для запуска оболочки и обеспечивают пользователю возможность взаимодействовать с ним ? – user3159253

+0

Я хочу запустить оболочку с некоторым перенаправленным каталогом (Java изменит каталог оболочки с помощью команды cd). После запуска я хочу, чтобы пользователь мог взаимодействовать с ним. – sol

+0

Если вы хотите запустить интерактивную оболочку, вам действительно нужно запустить виртуальный терминал, просто оболочки недостаточно. Оболочка только обрабатывает команды, запускает процессы и связывает их вместе, но это не то, что отображает вывод в ящике – Mzzl

ответ

2

Пример эффективного решения будет почти как ниже

Process process; 

    rt = Runtime.getRuntime(); 

try 
{ 

    process = rt.exec(new String[]{"bash","-c","ls -al /home/"}); 

    log.warn("message to display"); 

    BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream())); 

    String line=null; 

    while((line=input.readLine()) != null) { 

     log.warn(line); 
    } 

    int exitVal = process.waitFor(); 

    log.warn("Exited with error code : "+ exitVal); 

} 
catch (IOException e) 
{ 
    log.warn("IO Execption 1 Happen : " + e.getMessage()); 
} 
catch (Exception e) 
{ 
    log.warn("Execption Happen : " + e.getMessage()); 
} 
+0

Это не делает то, что попросил плакат, но я все еще думаю, что это здорово, что это сработало. – Mzzl

+0

Я уже пробовал этот метод, но все же спасибо за попытку. – sol

Смежные вопросы