入门
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,您应该没问题。对于其他人来说,您也一定会没事的。
首先,如果您输入一些文本然后输入 ^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 除运行代码外还能做什么。现在,让我们开始吧(真正地)。