groovy shell中的中断处理

在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显然非常困难(虽然它可能是possible,但我没有亲自尝试过)也许这就是他们试图用JLine做的事情,只是在Windows实现中有一个bug或者尚未完成它……

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

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...