shell 层次结构中的 CTRL C 行为

shell 层次结构中的 CTRL C 行为

我打开一个 shell(就像bash 中的那样)sbtnode debug然后在这个 shell 中,我打开另一个 shell(分别使用scalanode repl)。现在我想关闭最后一个 shell 并返回到我打开的第一个 shell(例如sbt),但是当我使用CTRL+时C,所有 shell 层次结构都将被关闭,我回到原来的 bash 终端。

据我了解这里,这种行为不标准,对我来说是不可取的。

编辑: 我正在努力解决这个问题,所以实际上问题与 和node debug无关。我用它们进行了一项实验,显示了我的 bash 的一般非标准行为。我在 windows 上发现了类似的问题sbtscala这里,但我使用Ubuntu 14.04

答案1

键入命令exitorquit将退出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, e.g. :he instead of :help.
Those marked with a * have more detailed help, e.g. :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。为此,这篇文章似乎表明可以使用的东西很少:

我发现scala解释器中的关键快捷键,只支持ctl+a,ctl+e和ctl+f,ctl+b,甚至tab键都不支持,更不用说代码自动补全了(比如f#的)

来源: 主题:scala 解释器控制台键盘快捷键和代码自动完成? - 消息#00309

REPL 怎么样?

根据此 SO Q&A 标题:有没有办法在 Scala 的 REPL 中使用 ctrl-d 作为前向删除?您可以通过 .Scala 2.9 的 REPL 使用默认的键绑定:keybindings

您显然还可以使用自己的自定义键绑定来覆盖键绑定,如下所示:

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

有关更多详细信息,请参阅上面引用的 SO 问答。

答案2

如果您在命令行中输入:kill -l,您将看到所有存在的不同中断。并非所有中断都是用户可配置的。

stty将使用按键(CtrlcCtrl\Ctrlz等)设置您的操作(中断)

stty intr ^C将按照您的预期设置密钥Ctrlc

另一个有趣的功能是陷印。

如果您使用:trap 'echo tried it' 2,它将捕获您的中断并将其替换为echo tried it

这是防止 shell 脚本中止到命令行的好方法。

相关内容