【问题标题】:opening a shell and interact with using Java打开 shell 并使用 Java 进行交互
【发布时间】:2014-03-16 09:01:14
【问题描述】:

我之前问过同样的问题但没有答案,并且发现了一些与此问题类似的其他问题herehere 但同样没有适当的答案。 谁能帮我解决这个问题。我正在尝试从 Java 打开一个 shell 并与之交互(编写命令并读取 shell 的输出)。命令将由用户给出,如更改目录、编译 C 程序等。命令列表不固定。

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

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

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

谢谢,我希望问题很清楚。

【问题讨论】:

  • 您的 Java 程序应该成为正在执行的 shell 的“指导者”,还是旨在运行 shell 并为用户提供与之交互的能力?
  • 我想启动 shell 并重定向一些目录(Java 将使用 cd 命令更改 shell 的目录)。一旦开始,我希望用户可以与之交互。
  • 如果要启动交互式shell,确实需要启动虚拟终端,仅shell是不够的。 shell 只处理命令、启动进程并将它们联系在一起,但它不是在框中显示输出的内容
  • 你能解释一下你需要这个做什么吗?也许还有另一种方法可以做到这一点。交互式shell有几种java实现,如java shelljava-shell.sourceforge.netrhinodeveloper.mozilla.org/en/docs/Rhino/Shellbeanshell.org
  • 我希望用 Java 开发一个 C 程序分析器。对于正确的模块开发,如果用户可以通过自己提供的 GUI 编译和执行 C 代码,而无需单独打开 bash 终端,这将很有用。

标签: java bash shell processbuilder


【解决方案1】:

可行的解决方案示例如下所示

   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());
}

【讨论】:

  • 这并不完全符合海报的要求,但我仍然认为它很酷。
  • 这个方法我已经试过了,还是谢谢你的尝试。
猜你喜欢
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 2021-02-10
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
相关资源
最近更新 更多