Есть ли способ заставить Scala REPL не останавливаться с помощью CTRL-C? - PullRequest
13 голосов
/ 15 сентября 2011

Я использую Scala REPL для интерактивного тестирования некоторых хеш-функций, которые я создаю.Я постоянно переключаюсь между кодом продукта (Eclipse), браузером и интерпретатором Scala, делаю копирование / вставку значений и результатов.В миксе я часто выполняю CTRL-C на интерпретаторе, выходя из сеанса и теряя все свои функции.

Можно ли позволить Scala REPL либо игнорировать CTRL-C, либо, что еще лучше,"вставить" с этим?Я работаю над Linux.

Ответы [ 3 ]

4 голосов
/ 16 сентября 2011

Я знаю только, как предотвратить выход 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

определяет и активирует обработчики для запуска, когда оболочка получает сигналыили другие условия.

2 - это значение SIGINT (это сигнал, который срабатывает при нажатии CTRL+C)

1 голос
/ 20 марта 2016

В качестве альтернативы нативному Scala REPL вы можете использовать Аммонит , который обрабатывает Ctrl + C :

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

@

Традиционный REPL Scala не обрабатывает быстроразвивающийся код и не дает вам выбора, кроме как убить процесс, потеряв всю вашу работу.
Аммонит-REPL позволяет прервать поток, остановить команду runaway и продолжить работу .

0 голосов
/ 19 сентября 2011

Repl уже перехватывает ctrl-C, но, очевидно, он не работает в Linux. Это работает на OSX. Если кто-то, использующий Linux, откроет заявку с достаточным количеством деталей, чтобы указать, почему нет, я могу это исправить.

...