有没有办法让 Scala REPL 不因 CTRL-C 而停止

发布于 2024-12-04 19:02:42 字数 197 浏览 0 评论 0原文

我正在使用 Scala REPL 以交互方式测试我正在构建的一些哈希函数。我不断地在产品代码 (Eclipse)、浏览器和 Scala 解释器之间切换,复制/粘贴值和结果。在混合过程中,我经常在解释器上执行 CTRL-C,退出会话并失去所有功能。

有没有办法让 Scala REPL 忽略 CTRL-C,或者更好的是,用它执行“粘贴”?我正在 Linux 上工作。

I'm using the Scala REPL to interactively test some hash functions I'm building. I'm constantly switching between the product code (Eclipse), the browser and the Scala interpreter, doing copy/paste of values and results. In the mix I'm often doing CTRL-C on the interpreter, exiting the session and loosing all my functions.

Is there any way to let the Scala REPL either ignore CTRL-C or, even better, perform "paste" with it? I'm working on Linux.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

幸福不弃 2024-12-11 19:02:42

我只知道如何防止 REPL 退出。可以以相同的方式重新映射 CTRL+C 来执行复制命令(如果有一些命令能够更改键盘映射而无需重新启动终端 - 我不知道是有一个)。无论如何,要阻止 ^C 将 REPL 调用包装在 .sh 脚本中,如下所示:

#!/bin/bash

#switch off sensitivity to ^C
trap '' 2

# here goes REPL invoke
scala

#get back sensitivity to ^C
trap 2

trap 命令

定义并激活当 shell 接收到消息时要运行的处理程序
信号
或其他条件。

2 是一个 SIGINT 值(这是当您按 CTRL+C)

I only know how to prevent REPL from exiting. Remapping of CTRL+C to perform copy command could be done in the same way (if there is some command that ables to change keymap w/out restarting terminal -- I don't know is there one). Anyways, to block ^C wrap your REPL invocation in .sh script like this:

#!/bin/bash

#switch off sensitivity to ^C
trap '' 2

# here goes REPL invoke
scala

#get back sensitivity to ^C
trap 2

trap command

defines and activates handlers to be run when the shell receives
signals
or other conditions.

2 is a SIGINT value (that's the signal which is triggered when you press CTRL+C)

情归归情 2024-12-11 19:02:42

repl 已经拦截了 ctrl-C,但显然它在 Linux 上不起作用。它确实可以在 osx 上运行。如果使用 Linux 的人开具了足够详细的票证来说明原因,我可以修复它。

The repl already intercepts ctrl-C, but apparently it doesn't work on linux. It does work on osx. If someone who uses linux opens a ticket with sufficient detail to indicate why not, I can fix it.

花落人断肠 2024-12-11 19:02:42

作为原生 Scala REPL 的替代方案,您可以使用 Ammonite确实处理Ctrl+C

@ while(true) ()
... hangs ...
^Ctrl-C
Interrupted!

@

传统的 Scala REPL 无法处理失控代码,您别无选择,只能终止进程,从而丢失所有工作。
Ammonite-REPL 可让您中断线程、停止失控命令并继续运行

As an alternative to the native Scala REPL, you can use Ammonite, which does handle Ctrl+C:

@ while(true) ()
... hangs ...
^Ctrl-C
Interrupted!

@

The traditional Scala REPL doesn't handle runaway code, and gives you no option but to kill the process, losing all your work.
Ammonite-REPL lets you interrupt the thread, stop the runaway-command and keep going.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文