【发布时间】:2018-12-02 15:07:28
【问题描述】:
我正在用 Java (https://gitlab.com/gitlabcyclist/secondmemory) 编写一个命令行程序,我希望能够运行 nano,以便用户可以在程序中编辑问题。我尝试像这样使用ProcessBuilder:
new ProcessBuilder("nano", "myfile").inheritIO().start();
不过,这不起作用。显示nano,但无法编辑文件。
明确一点:我想打开nano,以便用户可以编辑临时文件。我正在寻找一种在 C 或 Ruby 中执行系统调用之类的方法。
如果这个问题已经有答案,我很抱歉。谷歌搜索没有任何帮助,因为所有结果都是关于使用 nano 编辑 Java 文件。
任何帮助将不胜感激。
【问题讨论】:
-
ProcessBuilder 命令对我有用。顺便说一句,对编辑器进行硬编码对于软件来说是一种粗鲁的行为。请考虑使用
new ProcessBuilder(System.getenv().getOrDefault("EDITOR", "nano"), file)。几十年来,许多工具都使用 EDITOR 环境变量来指示用户首选的文本编辑器。 -
您是否在等待该过程完成?你不表现出来,或者说出来。 C 的
system()函数确实在等待。如果您不等待,编辑器实际上会运行,但是当您手动保存已编辑的文件时,您的 Java 程序已经使用了原始文件。 -
是的,我也试过
.waitFor()。它并没有真正帮助。我几乎可以使用它,但是当我尝试使用箭头或按 Ctrl-O 保存时,它只是打印了代码(如 ^O 和 ^[OC)。