Поведение CTRL C в иерархии оболочек

Прежде всего, жаль терминологических ошибок, я постараюсь быть ясными.

Я открываю оболочку (например, sbt или node debug из моего bash). Затем внутри этой оболочки я открываю другую (используя scala или node repl соответственно). Теперь я хочу закрыть последнюю оболочку и вернуться к первой, которую я открыл (например, sbt ), но когда я использую CTRL + C , вся иерархия оболочки закрывается, и я возвращаюсь к исходному терминалу bash.

Как я узнал отсюда , это поведение не является стандартным и нежелательным для меня.

EDIT: Я борюсь с этой проблемой при node debug , поэтому на самом деле проблема не в sbt и scala Я использовал их для выполнения эксперимента, который показывает общее нестандартное поведение моего bash. Я нашел аналогичную проблему с окнами здесь , но я использую Ubuntu 14.04

Ввод команды exit или quit приведет к выходу из console , вложенной внутри sbt . Вы также можете сокращать эти команды следующим образом:

 scala> :q Not interrupting system thread Thread[process reaper,10,system] [success] Total time: 138 s, completed May 25, 2014 1:33:22 PM > 

Или как :e . Эта информация приведена на странице справки console .

 scala> :help All commands can be abbreviated, eg :he instead of :help. Those marked with a * have more detailed help, eg :help imports. :cp <path> add a jar or directory to the classpath :help [command] print this summary or command-specific help :history [num] show the history (optional num is commands to show) :h? <string> search the history :imports [name name ...] show import history, identifying sources of names :implicits [-v] show the implicits in scope :javap <path|class> disassemble a file or class name :load <path> load and interpret a Scala file :paste enter paste mode: all input up to ctrl-D compiled together :power enable power user mode :quit exit the interpreter :replay reset execution and replay all previous commands :reset reset the repl to its initial state, forgetting all session entries :sh <command line> run a shell command (result is implicitly => List[String]) :silent disable/enable automatic printing of results :type [-v] <expr> display the type of an expression without evaluating it :warnings show the suppressed warnings from the most recent line which had any scala> 

Горячие клавиши в консоли?

То, что вам действительно нужно, – узнать, какие сочетания клавиш, если таковые имеются, доступны через console . С этой целью этот пост, по-видимому, указывает на то, что их мало:

Я нашел ключевую shourtcut в интерпретаторе scala, поддерживаю только ctl + a, ctl + e и ctl + f, ctl + b и даже клавишу табуляции, а не supprt, не говоря уже о автозаполнении кода (например, f #),

Источник: Subject: scala-интерпретатор командной строки и автозаполнение кода? – msg # 00309

Что относительно REPL?

Согласно этому SO Q & A под заголовком: есть ли способ использовать ctrl-d в качестве прямого удаления в REPL Scala? вы можете использовать стандартные привязки по умолчанию в REPL Scala 2.9 через :keybindings .

Вы также можете, по-видимому, переопределить привязки клавиш своими собственными пользовательскими типами:

 $ scala -Djline.keybindings=/path/to/keybindings.properties 

Для получения более подробной информации см. SO Q & A, упомянутую выше.

Если вы наберете в командной строке: kill -l , вы увидите все разные прерывания, которые существуют. Не все настраиваются пользователем.

stty установит ваше действие (прерывание) с помощью клавиш ( Ctrl c , Ctrl \ , Ctrl z и т. д.).

stty intr ^C установит ключ Ctrl c, как вы ожидаете.

Еще одна интересная особенность – ловушка.

Если вы используете: trap 'echo tried it' 2 , это уловит ваше прерывание и заменит его на echo tried it

Это хороший способ защитить ваш shell-скрипт от прерывания до командной строки.

Ну, я не нашел ответа на свой вопрос, но есть решение – использовать zsh терминал. В zsh я могу свободно расширять и уменьшать иерархию подчиненных оболочек, не убивая процесс.