加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

groovy shell中的中断处理

发布时间:2020-12-14 16:21:37 所属栏目:大数据 来源:网络整理
导读:在groovy shell中,如果你键入: $groovyshGroovy 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显然非常困难(虽然它可能是possible,但我没有亲自尝试过)也许这就是他们试图用JLine做的事情,只是在Windows实现中有一个bug或者尚未完成它……

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读