0

我们正在使用 groovy 来构建我们的 java 应用程序。groovy 脚本的目标是从 SVN 签出,运行 MVN,从 Jira 下载发行说明,允许用户编辑发行说明,然后将所有内容上传到 S3 以供公众使用。

我的问题是关于发行说明的编辑。我想让 groovy 在 txt 文件上运行 vim 并允许用户编辑文件并退出 vim。在 vim 退出时,我希望脚本继续。这应该在无头 linux 服务器上运行。我使用 open 命令在我的 Mac 上本地运行它,但我们正在将我们的构建移动到中央 AWS linux 服务器。

我正在寻找这样的东西:

println "Downloading release notes..."
"vi RELEASE-NOTES.txt".execute().waitFor()
println "Uploading the edited release notes here"

FWIW 我在 Mac OS 上使用的解决方案是:

"open -eW RELEASE-NOTES.txt".execute().waitFor();

它打开 TextEdit,允许我编辑和保存文件,在退出 TextEdit 时,应用程序继续前进并上传我编辑的文件。

4

2 回答 2

0

我认为 VI 解决方案失败了,因为您不再有控制台(但您对此并不十分具体)。

我很尴尬地说我不知道​​如何在 Unix 机器上解决这个问题,在 DOS 上我会使用“command /c vi”在新的命令 shell 中运行它,但即便如此它也可能是一个技巧该外壳是一个“控制台”供您输入(在 Windows 中它将打开一个新窗口)。

如果您将用户输入/输出通过管道传输到应用程序标准输入/输出,就像您所说的那样可能会起作用,但我敢打赌,一些 linux 大师知道更好的方法。

问题是“Groovy”拥有分配给用户 I/O 的控制台。如果您可以将 groovy 放在后台(相当于 ctrl-z)或切换到另一个控制台(可能使用 Screen 或 Linux 的多个控制台),您也许可以将其关闭,但我可能不会自己尝试。

重定向 I/O 可能是一个更好的选择,或者只是去找一个用 Java 编写的非 GUI 文本编辑器并集成它(可能是你最好的选择)。

于 2013-08-02T20:42:38.987 回答
0

根据这个答案,这似乎是不可能的,因为java处理进程的方式只是管道字节流,这与管道视频/tty/whatever无关。一个可能的解决方案是打开一个新窗口xterm。由于您使用的是无头 linux,因此我不确定这是否可行。你是通过 SSH 连接的吗?尝试使用连接到服务器ssh -X然后运行命令怎么样?(或者“无头”是否意味着减号 X 不起作用?:-))

println "Downloading release notes..."
['xterm', '-e', 'vi RELEASE_NOTES.txt'].execute().waitFor()
println "Uploading the edited release notes here"

而且...你有没有想过在shell中写这样一个脚本?似乎更适合,IMO。


我认为@Bill K 的建议会很棒,但经过快速谷歌搜索后,我找不到任何 java CLI 编辑器。

于 2013-08-03T13:34:38.670 回答