如何从Java程序在Linux中打开另一个命令行应用程序?

时间:2014-07-16 23:07:57

标签: java linux command-line-interface

我试图编写一个小的Java命令行应用程序,它将创建一个新文件,然后使用存储在$ EDITOR中的系统默认编辑器打开它,然后在编辑器关闭后退出。

到目前为止,没有运气,我已尝试过以下方法:

Desktop dt = Desktop.getDesktop();
dt.edit(file);

这种方法产生了UnsupportedOperationException,当我从终端运行我的程序时,这种方式很有意义,而不是桌面上的Java应用程序。

现在,我有这个:

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(commandString); // "vim newfile"
proc.waitFor();

正在运作,但不是我需要的方式。我跑的时候

ps a | grep vim

我可以看到它确实在后台运行,我已经给出了文件名:

1000 pts/1    S+     0:00 vim 2014-07-16.23-02

关于如何让它在前台运行的任何想法?

1 个答案:

答案 0 :(得分:1)

与许多交互式程序一样,vim希望其stdin成为可以发送ioctl次呼叫的真实终端。但是,当通过Runtime.exec() stdin执行时,将重定向到父进程(请参阅Javadoc on Process for more information)。

在Java 7中,您应该能够使用ProcessBuilder.inheritIO()传递文件句柄。 (免责声明:我没试过,YMMV。)