`

Erlang Shell的使用

 
阅读更多

1.1 shell起动

假设你已经安装了Erlang/OTP。如果用的是LinuxMac OS X、或者其他类UNIX系统,启动一个终端并运行erl命令即可。如果是Windows系统,你应该点击安装程序替你生成的Erlang图标,随后会启动名为werl的程序,这样可以避免直接在Windows终端下交互式运行erl碰到的一些问题。(如Ctrl+C Ctrl+G  Ctrl+break的问题)

 

1>是提示符。随着你不断地输入命令,它还会依次变为2>。你可以用上、下方向键或Ctrl+P/Ctrl+N键上下切换之前输入的表达式。另外还有几个Emacs风格的快捷键,但大部分都比较常规。

我们可以用 -noshell 标志启动Eralng系统,像这样(在你的终端命令行):

erl -noshell

在这种情况下,你无法通过终端与启动后的Erlang系统进行交互。要执行批处理任务或要将Erlang作为守护进程运行时可采用这个方法。

<!--[if !supportLists]-->1.2 <!--[endif]-->输入表达式

首先在shell下输入的并不是什么命令,而是表达式,两者的区别在于表达式一定有返回值(求值结果)。表达式求值完毕,shell会打印出求值结果。Shell会记住求值结果,后续可以用v(1) v(2)这样的语法引用它们。

 

<!--[if !supportLists]-->1.2.1 <!--[endif]--> 以句号结束

表达式为什么加上一个句号呢?因为erlang的表达式以句号结束。

在回车之前,必须用句点告诉shell表达式已经输入完毕。如果不输入句号就回车,shell会一直提示你输入更多字符(提示符编号不会增加),就像下面这样:

 

要是一开始忘记了句点,不用担心,补上之后敲回车就行了。

<!--[if !supportLists]-->1.2.2 <!--[endif]--> 输入带引号的字符串

这是一个初学者都会遇到的碰壁问题,看了后会顿开茅塞:输入字符串,当输入双引号与单引号时,有一个特别值的注意的问题,如果忘了结尾的引号就回车,shell会同样的提示符提示继续等待更多的输入,这跟上一个忘记句号的例子差不多。如果碰到这个情况,可以输入匹配的引号后再跟一个句号,然后回车。例如:

 

 

引号一定要匹配。引号里的句号是字符串的一部分。

 

也可以用Ctrl+p找回进行重新编辑,Ctrl+n, 方向键,及v(N)竺。

 

<!--[if !supportLists]-->1.3 <!--[endif]-->shell函数

Erlang中有一类像v(N)这样的涵数,它们只存在于shell中。这些shell函数的名字通常比较晦涩。要获得完整的shell函数清单,可以输入help()(也是一个shell函数)。

 

<!--[if !supportLists]-->1.4 <!--[endif]-->退出shell

方法有很多种,这些方法你应该熟悉,在管理和调试系统时它们各有各的作用。我们从对系统最友好的方法开始。

<!--[if !supportLists]-->1.4.1 <!--[endif]--> q().init:stop().

最安全的方法,它是上一节提到的shell函数q()。这是init:stop()函数的一个简写形式(也可以直接输入>init:stop(). )。该函数以一种可控的方法关闭整个Erlang系统,它会通知正在运行的应用停止运行并给它们预留出响应时间。通常整个过程在几秒内完成,但线上系统由于运行的进程多,可以需要花费更多的时间来完成各种清理工作。

<!--[if !supportLists]-->1.4.2 <!--[endif]--> BREAK菜单

任何情况下:在类UNIX系统下你可以按Ctrl+c唤出底层的BREAK菜单,在Windows下可以在werl终端(erl终端不可以使用,使用时会直接关闭该终端,即结束系统的运行)下用Ctrl+Break唤出该菜单。

 

(a)退出系统(硬停机)   (c)   返回shell (v)打印当前运行的Erlang版本,其他选项,等你成为erlang专家后,会发现这些信息对你调试很有用;(k)可以让你浏览所有Erlnag内部活动及至强制关闭任何故障的进程,前提是你明确知道自己在做什么。注意shell本身感知不到BREAK菜单,因此(c)返回shell时,需要回车提示符才会显示。

 

<!--[if !supportLists]-->1.4.3 <!--[endif]--> Ctrl+G (退出同BREAK

第三个也是最有用的一个退出方法,就是用Ctrl+G吹出用户开关命令菜单。这么做会令Erlang输出这么一段晦涩的文字:

 

键入h或?并回车,你将看到以下的list

 

在提示符下,可以键入c 回车返回shell

键入q 会硬停机,就跟BREAK菜单下的(a)一样----别把这个qshell函数q()混淆!后者对系统更友好。另外注意BREAK菜单位居更底层,你可以在Ctrl+G菜单中唤出BREAK菜单,反之则不行。

<!--[if !supportLists]-->1.5 <!--[endif]-->任务控制基础

假设你在Erlang提示符前,一不小心执行了一个跑起来刹不住车的程序(或者你等不及它跑完)。我们时不是总会干出这样的事情。这时你固然可以用以上的几种方法去关闭Erlang系统,再重启。但是,Erlang化的做法是取消当前任务后重启一个新任务(尤其系统中正运行着一些不能中断的重要进程时,从而不对系统其他方面造成任何影响)。

模拟一下这个情形,在Erlang提示符下输入如下内容:

timer:sleep(infinity).

假设我们输入timer:sleep(10000000).

现在shell被锁死了,要解决这个问题,先用Ctrl+G唤出上一节中介绍的用户开命令菜单,然后键入j列出当前的任务。这时应该只有一个任务,所以你会看到如下的情况:

 

键入C还是锁死状态,键入s(在本地系统上)启动一个新的shell任务,跟之前用的那个一样,然后在键入j查看所有任务,你可以键入c 2,另外由于2号任务已经被*标记为默认选项,也可以键入c进行连接:

 

 

这样你又回来了,但是等等,原来的任务呢?再键入Ctrl+G,列出任务,你会看到它仍旧挂在那里。我们可以输入k 1来关掉它,也可以让它继续挂着运行。也可以时行任务的相互切换。

 

 

干这类事情,务必确认你关闭的是那个任务,特别是生产系统。一旦进程关闭后,它所有的历史记录、先前的求值结果,以及一切与这个shell任务相关联的东西都会消失。

分享到:
评论

相关推荐

    erlang 中文基础教程

    在Erlang Shell中,你可以像使用计算器一样进行简单的算术运算,如`2+5.`,其中`.`是必要的结束符号,表示计算完成。Shell会返回结果`7`,并在下一行显示出新的提示符`2&gt;`。这种即时反馈的特性使得Erlang Shell成为...

    erlang中文基础教程

    顺序编程是 Erlang 编程语言的基础,用户可以使用 Erlang Shell 编写和运行顺序编程代码。顺序编程是指按照顺序执行的编程方式,用户可以使用各种运算符号和函数来实现不同的计算任务。 3. 模块和函数 模块和函数...

    kjell:Erlang Shell

    了解并熟练使用Erlang Shell对于学习和开发Erlang项目至关重要。它不仅是测试代码的场所,还是一个强大的工具,可以帮助开发者深入理解Erlang的语言特性和并发模型。在`kjell-master`这个压缩包中,可能包含的是`...

    21天erlang

    通过这份文档提供的信息,初学者可以了解如何从零开始搭建Erlang的开发环境,以及如何使用Erlang Shell和Emacs来编写、编译和运行Erlang程序。文档中的知识点设计得非常基础,以确保初学者在没有任何预备知识的情况...

    Erlang编程中文学习手册.pdf

    首先,手册介绍了Erlang语言的基础概念和Erlang Shell的使用方法。Erlang Shell是Erlang的一个交互式命令行界面,允许开发者在其中直接输入代码并得到即时反馈。它是学习和测试Erlang代码的有用工具。用户可以在不同...

    erlang资源

    5. **REPL(Read-Eval-Print Loop)**:Erlang shell的使用,它是学习和测试Erlang代码的重要工具。 6. **实际应用案例**:可能包含Erlang在实时系统、网络通信、数据库或Web服务等领域的应用示例。 这两本书结合...

    erlang安装设置.docx

    在启动Erlang Shell时,可以使用`-cd`参数来指定起始工作路径。例如: ```bash erl -cd /path/to/your/directory ``` #### 2. 使用配置文件 也可以通过编辑`erl.config`配置文件来设置默认的起始工作路径。通常情况...

    erlang_版本24.3.4.4

    - **Erlang shell(REPL)**:交互式环境,用于测试和调试代码。 - **Erlang的数据类型**:包括原子(atom)、整数、浮点数、字符串、列表、元组、位串等。 - **Pattern Matching**:Erlang的匹配操作符`=`允许在...

    基于Erlang的Shell集成游戏服务器设计源码

    该项目是一款基于Erlang语言开发的Shell集成游戏服务器设计源码,包含87个文件,其中61个Erlang源文件、18个头文件以及其他类型的文件,如2个Markdown文件、2个应用程序描述文件、1个Git忽略文件、1个Shell脚本文件...

    Erlang Windows 64位 安装包

    3. 验证安装:安装完成后,可以在命令行输入"erl"来启动Erlang shell,如果出现Erlang的欢迎信息,说明安装成功。 Erlang与RabbitMQ的关系:RabbitMQ是一个开源的消息代理和队列服务器,广泛用于处理异步任务和实现...

    erlang安装帮助包

    8. **验证安装**:最后,启动Erlang shell(`erl`命令),如果成功,你应该能看到Erlang的欢迎信息。 请注意,这个过程可能会因不同的操作系统(如Linux、macOS、Windows)而略有差异。在Windows环境下,你可能需要...

    erlang25.0 windows版本

    4. **验证**:安装完成后,打开命令行窗口并输入`erl`,如果Erlang成功安装,你应该能看到Erlang的shell(REPL)启动。 Erlang 25.0版本可能包含以下改进和新特性: 1. **性能优化**:新版本通常会对语言性能进行...

    erlang_environment_win64_21.0.1.zip

    它的设计哲学鼓励轻量级进程(称为Erlang进程)的大量使用,这些进程之间的通信是通过消息传递实现的。这使得Erlang非常适合构建高可用性和容错性的分布式系统。例如,著名的NoSQL数据库Riak就是基于Erlang构建的。 ...

    erlang 21.3

    安装完成后,你可以通过运行`erl`命令来启动Erlang shell,开始探索和使用Erlang 21.3的所有新特性。在开发过程中,熟练掌握Erlang的并发模型、模式匹配、函数式编程理念以及OTP框架,将有助于构建出高效、可靠的...

    ErlangOTP 21.3.zip

    `erl`是Erlang的命令行接口,用于启动Erlang shell,开发者可以在这个交互式环境中编写、测试Erlang代码。在安装完成后,你可以在终端输入`erl`启动Erlang shell,然后就可以开始探索Erlang的世界了。 总结来说,...

    docker-erlang:Erlang 的 Docker 镜像打包

    #用法启动一个 erlang shell 的一次性实例docker run -it --rm unbalancedparentheses/erlang 运行容器以使用开发环境docker run -it --name erlang-dev unbalancedparentheses/erlang /bin/bash

    erlang 24.0版本 win64 位

    无论是初次接触Erlang的开发者,还是已经在使用Erlang构建系统的团队,都能从中受益。新版本不仅带来了性能提升和功能增强,还继续保持着Erlang在高并发、容错性和分布式计算方面的优势。因此,对于那些需要处理大量...

    erlang-otp-win64位 25.3版本

    为了确保Erlang OTP能够正常工作,安装后可以验证其安装是否成功,例如通过命令行输入`erl`启动Erlang shell,如果能够进入交互式模式,就表明Erlang已正确安装。接下来,如果计划安装RabbitMQ,需要从RabbitMQ官方...

Global site tag (gtag.js) - Google Analytics