36

我知道我们可以用 control-C 退出 IEX 控制台。我很好奇是否有一个命令可以在控制台中输入也可以做同样的事情。

4

5 回答 5

33

我可以想到 3 种退出 IEx shell 的方法:

  1. 提到的<ctrl-c>命中两次或一次q,然后<enter>
  2. <ctrl-g>然后q+ <enter>,
  3. 最后System.halt

但是和其他的还是有区别System.halt的。

System.halt停止 Erlang 运行时”,而其他只是“退出 shell ”。

当您只有一个 shell 会话正在运行或会话未附加到单独的运行时,那么两种方式都会产生相同的结果。但是,如果您有一个会话连接到单独的运行时,例如通过iex --remsh(远程外壳)然后System.halt在其中运行将停止运行时,因此使两个外壳进程/运行时终止。只是退出 shell(通过方法 1. 或 2.)不会停止它所连接的运行时。

结论:如果你将你的 shell 连接到其他运行时,那么知道这System.halt将停止你连接到的运行时。如果您不想这样做,请使用<ctrl-c>.

更新:最近我也发现了关于<ctrl-\>. 你可以在这篇文章中阅读更多关于它的信息:

我不知道的是,您可以通过发送 Ctrl- 来退出 shell。shell 将立即退出。据我所知,它与在 Break 命令中中止 shell 具有相同的效果,它不会影响远程节点,并且它也可以在 iex 之外工作(例如,您可以使用它来终止您的测试)。

于 2015-05-07T08:12:17.037 回答
17
  1. 断开与 shell 的连接并停止当前节点。这是您在大多数情况下所需要的。

    1.1。Ctrl+\- 退出 Erlang shell 的标准方法。请参阅“4.4 如何退出 Erlang shell?” 在Erlang - 入门

    1.2. Ctrl+C, a, Enter- 通过中断菜单的(a)bort命令。

    1.3. Ctrl+C, Ctrl+C- 看起来像是 Break 菜单的未记录功能。

    1.4. Ctrl+G, q, Enter- 通过User Switch菜单的q(quit erlang) 命令(参见Erlang -- shell -- JCL Mode)。

    注意:如果您已经连接到远程节点,这会使远程节点保持活动状态iex --remsh(请参阅IEx -- Remote Shells)。iex --help

  2. 关闭您连接的节点。

    2.1。System.halt- 快速而肮脏的关机。运行时系统以状态码 0 退出(干净退出,没有错误)。您也可以System.halt(:abort)使用核心转储调用中止。与 相同:erlang.halt

    2.2. :init.stopSystem.stop在未来的版本中) - 干净关机。所有应用程序都被顺利关闭,所有代码都被卸载,并且在系统通过调用终止之前关闭所有端口halt(Status)

    注意:如果已使用iex --remsh.

请注意,如果 Erlang 以忽略中断、+Bi、系统标志启动时所有这些选项都将被禁用:(iex --erl +Bi这可能很有用,例如在运行受限 shell 时)。有关更多信息,请参见Erlang -- erl

于 2016-12-21T01:09:23.803 回答
8

好像

 System.halt

也有效。

于 2015-05-06T19:03:05.343 回答
3

在shell :c.q() 中输入并开心

于 2017-10-09T03:37:02.063 回答
1

我一直认为ctrl-G 后跟q 退出是退出 iex shell 的官方方式。

请参阅BREAK 菜单上的 IEx 文档部分,其中还显示了如何在备用 shell 等之间切换。

于 2015-05-06T21:30:27.543 回答