Есть ли способ сделать Scala REPL не останавливаться на CTRL-C
Я использую Scala REPL для интерактивного тестирования некоторых хеш-функций, которые я создаю. Я постоянно переключаюсь между кодом продукта (Eclipse), браузером и интерпретатором Scala, копируя/вставляя значения и результаты. В миксе я часто делаю CTRL-C на интерпретаторе, выходя из сеанса и теряя все свои функции.
Есть ли способ разрешить Scala REPL игнорировать CTRL-C или, что еще лучше, выполнить "вставить" с ним? Я работаю над Linux.
Ответы
Ответ 1
Я знаю только, как предотвратить выход REPL. Перенос команды CTRL+C
для выполнения команды копирования может быть выполнен таким же образом (если есть некоторая команда, которая позволяет сменить раскладку с перезапуском терминала, я не знаю, есть ли она). В любом случае, чтобы заблокировать ^C
, включите вызов REPL в .sh script следующим образом:
#!/bin/bash
#switch off sensitivity to ^C
trap '' 2
# here goes REPL invoke
scala
#get back sensitivity to ^C
trap 2
команда trap
определяет и активирует обработчики, которые будут выполняться при получении оболочки сигналы или других условий.
2 является значением SIGINT (сигнал, который запускается при нажатии CTRL+C
)
Ответ 2
В качестве альтернативы native Scala REPL вы можете использовать Ammonite, который обрабатывает Ctrl + C:
@ while(true) ()
... hangs ...
^Ctrl-C
Interrupted!
@
Традиционный Scala REPL не обрабатывает код убегания и не дает вам никакой возможности, кроме как убить процесс, потеряв всю вашу работу.
Ammonite-REPL позволяет прерывать поток, останавливать команду runaway и продолжать движение.
Ответ 3
Repl уже перехватывает ctrl-C, но, видимо, он не работает на linux. Он работает на osx. Если кто-то, кто использует linux, открывает билет с достаточной детализацией, чтобы указать, почему нет, я могу это исправить.