我们正在使用groovy来构建我们的java应用程序。 groovy脚本的目标是从SVN签出,运行MVN,从Jira下载发行说明,允许用户编辑发行说明,然后将所有内容上传到S3供公众使用。
我的问题在于编辑发行说明。我想在txt文件上运行groovy并允许用户编辑文件并退出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并上传我编辑的文件。
答案 0 :(得分:0)
我认为VI解决方案失败了,因为您不再拥有控制台(但您对此并不十分具体)。
我很尴尬地说我不知道如何在Unix机器上解决这个问题,在DOS上我会使用“command / c vi”在新的命令shell中运行它,但即使这样它也可能是给那个shell一个“控制台”让你输入的技巧(在windows中会打开一个新窗口)。
如果你将用户输入/输出传送到应用程序stdin / out,那么就像你说的那样可行。但我敢打赌,一些Linux专家知道更好的方法。
问题是“Groovy”拥有分配给用户I / O的控制台。如果你可以将groovy放在后台(相当于ctrl-z)或切换到另一个控制台(可能使用Screen或Linux的多个控制台),你可以将它拉下来,但我可能不会自己尝试。
重定向I / O可能是更好的选择,或者只是找一个用Java编写的非gui文本编辑器并集成它(可能是你最好的选择)。
答案 1 :(得分:0)
根据这个answer,似乎不可能,因为java处理进程的方式只是管道字节流,这与管道视频/ tty /无关。一种可能的解决方案是使用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编辑器。