2014-02-17 59 views
1

我以前问过同样的问题,但没有答案,也发现了类似这个问题herehere但同样没有适当的答案的一些其他问题。 任何人都可以请帮我解决这个问题。我试图从Java打开一个shell并与之交互(编写命令并读取shell的输出)。这些命令将由用户给出,例如更改目录,编译C程序等。命令列表不固定。打开外壳和交互使用Java

我也试过并使用/ bin/bash -c方法以及以下内容。

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

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

谢谢,我希望问题清楚。可行的解决方案的

+0

如果你的Java程序是正在执行的“导演”为外壳,或者它旨在运行shell,并提供与它进行交互用户的能力? – user3159253

+0

我想用重定向的某个目录启动shell(Java将使用cd命令更改shell的目录)。一旦开始,我希望用户可以与之交互。 – sol

+0

如果你想开始一个interractive壳,你真的需要启动虚拟终端,只是外壳是不够的。外壳只处理命令,启动过程和他们联系在一起,但它是不是显示在一个盒子 – 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