`

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任务相关联的东西都会消失。

分享到:
评论

相关推荐

    kjell:Erlang Shell

    kjell:Erlang Shell

    docker-erlang:Erlang 的 Docker 镜像打包

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

    erlog, 在Erlang中,Prolog解释器.zip

    erlog, 在Erlang中,Prolog解释器 Erlog - 用于Erlang应用程序的PrologErlog是在Erlang中实现的Prolog解释器,并与Erlang运行时系统集成。 它是Prolog标准的子集。 还包括 Erlog shell ( REPL ) 。如

    otp:ErlangOTP

    下面的示例定义一个函数world/0 ,该函数在Erlang shell中显示“ Hello,world”: - module ( hello ). - export ([ world / 0 ]). world () -&gt; io : format ( " Hello, world \n " ). 将文件另存为hello.erl并...

    Erlang中文手册

    1.2.1 Erlang Shell .........................................1 1.2.2 模块和函数 .............................................3 1.2.3 元子(Atoms) ...........................................6 1.2.4 ...

    chrome-erlang:一个Erlang Chrome Shell扩展程序

    Chrome二郎 一个Erlang Chrome Shell扩展程序 安装 下载资料库 前往chrome:// extensions 确保选中“开发人员模式” 点击“加载解压后的扩展程序...” 导航到您放置存储库的目录

    Introducing Erlang: Getting Started in Functional Programming

    Get cozy with Erlang’s shell, its command line interface Define functions, using the fun tool, to represent repeated calculations Discover atoms, pattern matching, and guards: the foundations of your...

    Erlang简易聊天室

    使用Shell充当客户端,多个聊天频道,支持私聊 队伍聊天 区域聊天; Mysql存储用户账户密码,实现注册登录; 此项目由本人入门Erlang过程中编写,前期了解Erlang这门语言如何使用Socket和进程的调用,以及各种Erlang...

    homelander:由ErlangOTP支持的简单shell命令监视

    homelander:由ErlangOTP支持的简单shell命令监视

    binbo:使用Bitboards以Erlang编写的国际象棋表示,可以在游戏服务器上使用

    宾波 Binbo是使用以纯Erlang编写的功能齐全...因此,您可以在以下方面编写自己的客户端或服务器端国际象棋机器人应用程序: Binbo,或者直接在Erlang shell中使用引擎。 Binbo属于列表。 目录 特征 要求 快速开始

    Gradualizer:用于Erlang的渐进式系统

    渐变器:Erlang的渐变类型系统Erlang的... make escriptbin/gradualizer [ OPTIONS ] [ FILES TO CHECK ]从Erlang Shell运行Gradualizer 使用路径中的所有相关模块启动交互式提示。 然后,使用gradualizer模块中的功能

    echat:带有Erlang后端的Web聊天JavaScript库

    打开erlang shell erl -pa ebin deps/*/ebin -env ERL_LIBS . 从echat:start(). 并以echat:stop(). 该应用程序具有内置的文件服务器,该服务器提供priv目录中的所有文件,默认端口为8222 (可以在启动应用程序之前...

    docsh:Shell中的Erlang文档

    docsh:Shell中的Erlang文档

    newrelic-erlang:(不工作)Erlang 的原生 NewRelic 绑定

    NewRelic Erlang 尚不可用 发展 NewRelic 将其代理 sdk 作为编译后的.so库分发,仅适用于 Linux,因此您需要在该平台上运行/编译此库。 为了更容易,该项目提供了一个 Vagrant ...make shell启动一个 erlang shell

    erlang_v8_lib:一个小包装器,围绕erlang-v8创建一个迷你框架

    erlang_v8_lib 建立在erlang_v8之上的自以为是JavaScript框架。 erlang_v8_lib是一个Erlang应用程序,其中包括一个小型框架,以简化向脚本环境添加功能的任务。 该应用程序添加了三个主要组件来完成此任务: v8...

    redis:Redis协议Erlang实现

    使用redis:encode/1函数以Redis数据格式编码Erlang术语: % integer redis : encode ( 1 ). % simple string redis : encode (&lt;&lt; " test " &gt;&gt;). % bulk string redis : encode ({ bulk_string , &lt;&lt; " ...

    markov_workshop_template:作为 Intro To Erlang 研讨会的一部分,马尔可夫链的模板应用程序

    Erlang 工作坊简介 - Erlang 中的马尔可夫...要打开加载了应用程序的 Erlang shell 实例,请运行 $ rebar3 shell 填写完所有方法后,我们应该能够在 shell 中完整运行应用程序。 &gt; TwoCities = " It was the best of

    erlang-irc-bot:Erlang中的一个简单的可扩展irc机器人

    用Erlang编写的可扩展ircbot 当我决定需要学习Erlang时,一切就开始了。 同时,我需要一个简单的ircbot来处理我经常访问的某些频道。... 然后启动一个Erlang REPL shell。 确保将模块路径设置为./ebin/目

    ErlangPlayBase:动手 Erlang 教程会话的起点

    &gt; means erlang shell 快速开始 $&gt; git clone git://github.com/eriksoe/ErlangPlayBase.git $&gt; cd ErlangPlayBase $&gt; erl -make $&gt; erl -pa ebin -boot start_sasl -name &lt;YOUR&gt;@&lt;IP&gt; -setcookie omnomnom &gt; ...

    erlang日志应用log4erl(非sasl)

    or you can run the below from erlang shell: $&gt; cd src $&gt; erl 1&gt; make:all([{outdir, "../ebin"}]). 3. USAGE: ========= 1- In order to use log4erl, you need to first include it in the path. There are 2...

Global site tag (gtag.js) - Google Analytics