入门

Shell

在 Erlang 中,您可以在模拟器中测试大部分内容;它将在编译和部署时运行您的脚本,但也允许您实时编辑内容。要在 Linux 中启动 shell,请打开终端并键入 $ erl。如果您已正确设置所有内容,您应该会看到类似这样的文本

Erlang R13B01 (erts-5.7.2) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.2  (abort with ^G)

恭喜,您正在运行 Erlang shell!

对于 Windows 用户,您仍然可以运行 erl.exe shell,但建议您改为使用 werl.exe,它可以在您的开始菜单中找到 (programs > Erlang)。Werl 是 Erlang shell 的 Windows 专属实现,它有自己的窗口,带有滚动条并支持命令行编辑(如复制粘贴,这对于 Windows 中的标准 cmd.exe shell 来说很麻烦)。如果您想重定向标准输入或输出,或者使用管道,仍然需要 erl shell。

我们将能够在模拟器中输入和运行代码,但首先,让我们看看如何在其中四处走动。

Shell 命令

Erlang shell 有一个基于 Emacs 子集的内置行编辑器,Emacs 是一款自 70 年代以来一直使用的流行文本编辑器。如果您熟悉 Emacs,您应该没问题。对于其他人来说,您也一定会没事的。

super turtle

首先,如果您输入一些文本然后输入 ^A (Ctrl+A),您应该会看到您的光标移动到行的开头。^E (Ctrl+E) 将您带到末尾。您可以使用箭头键向前、向后移动,显示前一行或后一行,以便您可以重复代码。

如果您输入类似 li 的内容然后按 "Tab",shell 将为您完成到 lists: 的术语。再次按 Tab 键,shell 将建议您在之后使用许多函数。这是 Erlang 完成模块 lists 然后建议来自它的函数。您可能会发现这种记法很奇怪,但别担心,您很快就会熟悉它。

我认为我们已经看到了足够多的 shell 功能,可以正常使用,只有一件事:我们不知道如何离开!有一个快速的方法可以找到方法。只需输入 help().,您应该会获得有关您可以在 shell 中使用的许多命令的信息(不要忘记句号 (.),因为它对于命令运行是必需的)。我们将在后面的某个时间使用其中一些命令,但我们唯一关心的是为了退出而需要的一行是
q() -- 退出 - init:stop() 的简写
所以这是一种方法(实际上是两种方法)。但这在 shell 冻结的情况下无济于事!如果您注意到了,当您启动 shell 时,有一个关于“使用 ^G 中断”的注释。让我们这样做,然后按 h 获取帮助!

User switch command
 --> h
  c [nn]            - connect to job
  i [nn]            - interrupt job
  k [nn]            - kill job
  j                 - list all jobs
  s [shell]         - start local shell
  r [node [shell]]  - start remote shell
  q        - quit erlang
  ? | h             - this message
 -->

如果您输入 i 然后输入 c,Erlang 应该会停止当前正在运行的代码,并带您返回到响应式 shell。j 将为您提供正在运行的进程列表(数字后的星号表示这是您当前正在运行的任务),然后您可以使用 i 然后是数字来中断它。如果您使用 k,您将直接杀死 shell 而不是只是中断它。按 s 启动一个新的 shell。

 Eshell V5.7.2  (abort with ^G)
1> "OH NO THIS SHELL IS UNRESPONSIVE!!! *hits ctrl+G*"
User switch command
 --> k
 --> c
Unknown job
 --> s
 --> j
   2* {shell,start,[]}
 --> c 2
Eshell V5.7.2  (abort with ^G)
1> "YESS!"

如果您重新阅读帮助文本,您会注意到我们可以启动远程 shell。我现在不会详细介绍,但这应该让您了解 Erlang VM 除运行代码外还能做什么。现在,让我们开始吧(真正地)。