erlang shell 命令中文说明

原文 2013-11-21 21:39:07 发表于 CSDN,这里对以前写的文章做下收录。

erlang shell 是在命令行模式下使用命令和 erlang 交互的工具。erlang shell功能十分强大,可以直接编译、加载、执行、调试模块等等,完全可以将shell做为erlang项目的终端使用。文章将对erlang shell 命令做介绍,还简单以示例说明。

打开erlang shell的帮助信息,在这里变成中文了。同时可以看下官方文档

shell 函数帮助

Eshell V5.10.2  (abort with ^G)
1> help().
** shell 内置命令 **
b()        -- 显示所有绑定的变量
e(N)       -- 重复某次查询 <N>
f()        -- 释放所有绑定的变量
f(X)       -- 释放某个绑定的变量
h()        -- 显示之前的操作
history(N) -- 设置保存之前操作命令的条数
results(N) -- 设置保存之前操作结果的条数
catch_exception(Bool) -- 设置的执行过程中的异常处理
v(N)       -- 使用某次查询的值 <N>
rd(R,D)    -- 定义一个 record
rf()       -- 移除所有 record
rf(R)      -- 移除某个 record
rl()       -- 显示所有 record
rl(R)      -- 显示某个 record 信息
rp(Term)   -- 显示某个元组的所有内容
rr(File)   -- 从一个文件或模块读取 record 定义

** c 模块命令 **
bt(Pid)    -- 显示一个进程的栈回溯
c(File)    -- 编译及重新加载模块
cd(Dir)    -- 改变工作目录
flush()    -- 刷新信箱(以便shell接收信息)
help()     -- 帮助信息
i()        -- 显示系统信息
ni()       -- 和 i() 一样显示系统信息,还包括网络节点的系统信息
i(X,Y,Z)   -- 通过 pid <X,Y,Z> 获取某个进程的信息
l(Module)  -- 加载或重新加载模块
lc([File]) -- 编译一个列表的 Erlang 模块
ls()       -- 显示当前工作目录下的文件列表
ls(Dir)    -- 显示某个目录下的文件列表
m()        -- 显示已加载进系统的模块
m(Mod)     -- 显示某个模块信息
memory()   -- 显示内存分配信息
memory(T)  -- 显示某项内存分配信息 <T>
nc(File)   -- 在所有节点编译及加载模块
nl(Module) -- 在所有节点重新加载模块
pid(X,Y,Z) -- 通过 pid <X,Y,Z> 获取某个进程 pid
pwd()      -- 显示当前工作目录
q()        -- 关闭 erlang shell
regs()     -- 显示注册过的进程信息
nregs()    -- 和 regs() 一样显示注册过的进程信息,还包括网络节点的进程信息
xm(M)      -- 查找某个模块未定义的函数,未使用的函数,已弃用的函数
y(File)    -- 编译 Yecc 文件(.yrl)
** i 模块命令  **
ih()       -- 显示 i 模块的帮助信息
true

shell 函数说明

1、显示绑定变量
b()  -- 显示所有绑定的变量

1> [A,B,C] = [1,2,3].
[1,2,3]
2> b().
A = 1
B = 2
C = 3
ok

2、重复查询
e(N)   -- 重复某次查询

3> e(1).
[1,2,3]

3、释放绑定变量
f()        -- 释放所有绑定的变量
f(X)     -- 释放某个绑定的变量

4> A.
1
5> f(A).
ok
6> A.
* 1: variable 'A' is unbound
7> B.
2
8> f().
ok
9> B.
* 1: variable 'B' is unbound
10> C.
* 1: variable 'C' is unbound

4、使用查询结果
v(N)  -- 使用某次查询的值

11> A1 = v(4).
1
12> A1.
1

5、record 操作
rd(R,D)    -- 定义一个 record
rf()       -- 移除所有 record
rf(R)      -- 移除某个 record
rl()       -- 显示所有 record
rl(R)      -- 显示某个 record 信息

13> rd(person, {name, age, address, salary, children}).
person
14> rd(child, {name, age}).
child
15> rl().
-record(child,{name,age}).
-record(person,{name,age,address,salary,children}).
ok
16> rl(child).
-record(child,{name,age}).
ok

6、显示元组内容
rp(Term)   -- 显示某个元组的所有内容
erlang shell会自动省略内容太长的元组,使用rp命令可以完整显示出来

17> lists:seq(1,50).
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
 23,24,25,26,27,28,29|...]
18> rp(lists:seq(1,50)).
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
 23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,
 43,44,45,46,47,48,49,50]
ok

7、工作目录
cd(Dir)   --  改变工作目录
pwd()     --  获取工作目录

19> pwd().
d:/tmp
ok
20> cd("d:/").
d:/
ok
21> pwd().
d:/
ok

8、进程操作
self()              --  获取当前进程 pid

pid(X,Y,Z)            -- 通过 pid <X,Y,Z> 获取某个进程 pid
exit(Pid)              -- 杀死某个进程
catch_exception(Bool)  -- 设置的执行过程中的异常处理
22> self().
<0.31.0>
23> catch_exception(false).
true
24> exit(pid(0,31,0)).
** exception exit: <0.31.0>
25> self().
<0.33.0>
26> catch_exception(true).
false
27> exit(pid(0,33,0)).
* exception exit: <0.33.0>
28> self().
<0.33.0>

《erlang shell 命令中文说明》上有2条评论

  1. 您好,我读了你在博客园发表的文章https://www.cnblogs.com/quitboy/p/4256762.html,看到您在最后附上了.beam文件读取工具,但是网站已经挂了,如果工具还在的话不知道能否发我一份,谢谢!

    1. ^_^ 你好,原来博客不是我写的,我尝试找到那个文件,没找到。所以,我看了erlang的源代码,其中也有解析beam文件的过程,主要是 beam_lib.erl ,可从 beam_lib:info/1 入手看

发表评论

邮箱地址不会被公开。 必填项已用*标注