![shell 层次结构中的 CTRL C 行为](https://linux22.com/image/37024/shell%20%E5%B1%82%E6%AC%A1%E7%BB%93%E6%9E%84%E4%B8%AD%E7%9A%84%20CTRL%20C%20%E8%A1%8C%E4%B8%BA.png)
我打开一个 shell(就像bash 中的那样)sbt
。node debug
然后在这个 shell 中,我打开另一个 shell(分别使用scala
或node repl
)。现在我想关闭最后一个 shell 并返回到我打开的第一个 shell(例如sbt
),但是当我使用CTRL+时C,所有 shell 层次结构都将被关闭,我回到原来的 bash 终端。
据我了解这里,这种行为不标准,对我来说是不可取的。
编辑:
我正在努力解决这个问题,所以实际上问题与 和node debug
无关。我用它们进行了一项实验,显示了我的 bash 的一般非标准行为。我在 windows 上发现了类似的问题sbt
scala
这里,但我使用Ubuntu 14.04
答案1
键入命令exit
orquit
将退出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
将使用按键(Ctrlc、Ctrl\、Ctrlz等)设置您的操作(中断)
stty intr ^C
将按照您的预期设置密钥Ctrlc。
另一个有趣的功能是陷印。
如果您使用:trap 'echo tried it' 2
,它将捕获您的中断并将其替换为echo tried it
这是防止 shell 脚本中止到命令行的好方法。