groovyshell中的中断处理

groovyshell中的中断处理,groovy,groovyshell,Groovy,Groovyshell,在groovy shell中,如果键入以下内容: $ groovysh Groovy Shell (2.3.7, JVM: 1.7.0_11) Type ':help' or ':h' for help. ---------------------------------------------------------------------------------------------------------------------------------------------------

在groovy shell中,如果键入以下内容:

$ groovysh
Groovy Shell (2.3.7, JVM: 1.7.0_11)
Type ':help' or ':h' for help.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
groovy:000> (1..1234567)
如果不小心按Enter键,您很可能会破坏当前会话,而不会有太多希望继续。这是一个简单的例子——假设你做了如下事情:

(1..123456).collect { 'abc' * 80 }
你得到了要点——很明显,你可以在控制台中做一些事情,在那里你有你想要处理的状态。有没有告诉groovy停止,但不杀死groovysh的方法(Ctrl+C是这样做的)


或者告诉它每次少打印,除非要求更多?不确定可能发生什么,如果有任何提示的话?

在windows Groovysh中,似乎没有将ctrl-c作为中断信号转发给应用程序。如果我运行这个:

while(true)Thread.sleep(1000);
或者这个:

while(true);
在groovyconsole中,它可以被中断,但当我在Groovysh中做同样的事情时,它不能被中断,它只是挂起,直到我终止进程

其中一些与groovy用于输入的JLine有关,因为如果我像这样禁用JLine:

groovysh -console=false
然后ctrl-c终止整个过程,而不是忽略ctrl-c。也许它试图捕捉并转发ctrl-c,但转发部分出现了问题

GroovyConsole可以很容易地“捕获”ctrl-c,因为windows不以中断的形式提供它,它只是输入。对于Groovysh这样的控制台应用程序,捕获SIGINT显然非常困难(尽管可能是,我个人还没有尝试过),也许这就是他们试图使用JLine所做的,只是在windows实现中出现了一个bug,或者还没有完成它


修复这个问题会很好,但除非我可以像GroovyConsole一样编写自己的repl GUI来维护它的状态,就像Groovysh一样。

我几乎被建议使用groovy控制台。它有启用中断选项和一个中断按钮。可悲的是,它不起作用。我使用intellij编写小型脚本。它可以暂停/终止正在运行的脚本。不确定这对您的情况是否有帮助。谢谢Bill K-看起来我应该提到,我在Linux上。但是,同意-在这两种情况下,问题是它会终止会话,也就是说,我不知道如何中断最后一次处理而不是终止整个会话。如果这对你来说真的很重要,你可以查看我帖子上的链接(抱歉,这是PDF,在其他地方找不到信息),这似乎是一种让Java允许您处理SIGINT而不仅仅是bailing的方法。您可以在默认情况下加载到shell中的groovy类中执行此操作。我可能会在有时间的时候尝试这种方法。