在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.