打开shell并使用Java与进行交互
我以前也问过同样的问题,但没有答案,我还发现了一些与这个问题类似的问题,但同样没有合适的答案。 谁能帮我解决这个问题。我试图从Java打开一个shell并与之交互(编写命令并读取shell的输出)。命令将由用户发出,如更改目录、编译C程序等。命令列表不是固定的 我还尝试并使用了/bin/bash-c方法以及以下方法打开shell并使用Java与进行交互,java,bash,shell,processbuilder,Java,Bash,Shell,Processbuilder,我以前也问过同样的问题,但没有答案,我还发现了一些与这个问题类似的问题,但同样没有合适的答案。 谁能帮我解决这个问题。我试图从Java打开一个shell并与之交互(编写命令并读取shell的输出)。命令将由用户发出,如更改目录、编译C程序等。命令列表不是固定的 我还尝试并使用了/bin/bash-c方法以及以下方法 Process p = new ProcessBuilder("xterm").start(); Process p = new ProcessBuilder("/bin/bash
Process p = new ProcessBuilder("xterm").start();
Process p = new ProcessBuilder("/bin/bash").start();
谢谢,我希望问题是清楚的。可行解决方案的示例如下所示
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());
}
您的Java程序应该是正在执行的shell的“控制器”,还是打算运行shell并提供用户与之交互的能力?我想在启动shell时重定向一些目录(Java将使用cd命令更改shell的目录)。一旦启动,我希望用户可以与之交互。如果你想启动一个活动外壳,你真的需要启动一个虚拟终端,仅仅外壳是不够的。shell只处理命令、启动进程并将它们绑定在一起,但它并不是在框中显示输出的东西。您能解释一下您需要它做什么吗?也许还有别的办法。有几个交互式shell的java实现,比如JavaShellRhino,我希望用java开发一个C程序分析器。对于正确的模块开发,如果用户可以通过自己提供的GUI编译和执行C代码,而无需单独打开bash终端,这将是非常有用的。这并不完全符合海报的要求,但我仍然认为它工作起来很酷。我已经尝试过这种方法,但仍然感谢您的尝试。