4

これを入力すると、Groovyシェルで:

$ 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に停止するように指示する方法はありCtrl+Cますか?

または、より多くが要求されない限り、毎回印刷量を減らすように指示しますか? 何が可能かわかりません - 何かヒントはありますか?

4

1 に答える 1

1

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 が ctrl-c を割り込みとして配信せず、単なる入力であるためです。Groovysh のようなコンソール アプリの場合、SIGINT をキャッチするのはかなり難しいようです (可能かもしれませんが、個人的に試したことはありません) おそらくそれが JLine で行おうとしているもので、Windows の実装にバグがあるだけです。まだ完成していません…

これを修正するのは良いことですが、Groovysh のような状態を維持する GroovyConsole のような独自の repl GUI を作成することはできません。

于 2014-11-20T01:42:03.473 に答える