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

标签 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

关于如何让它在前台运行有什么想法吗?

最佳答案

像许多交互式程序一样,vim 期望它的 stdin 是一个真正的终端,它可以向其发送 ioctl 调用。但是当通过 Runtime.exec() 执行时,stdin 将被重定向到父进程(参见 Javadoc on Process for more information)。

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

关于java - 如何从 Java 程序在 Linux 中打开另一个命令行应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24792337/

相关文章:

java - 数学表达式中的单独数字

linux - crontab shutdown 命令从不运行

linux - 简单的原始数据包捕获和发送程序

linux - 访问 nginx、ubuntu 17 的文件夹 jenkins 工作区

java - n 数量整数之和扫描器

java - Android OpenGL ES 2.0 多个对象

java - 加密/解密java类并使用自定义类加载器在tomcat中实现和部署

c++ - 将用户输入转换为 C++ 类型的 if/else 语句过多

C 中的 CLI 参数

java - 如何在不控制源代码的情况下 headless 运行 gui Java 应用程序?