-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathstarting-out.html
131 lines (117 loc) · 8.09 KB
/
starting-out.html
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="keywords" content="命令,代码,虚拟机,交互式环境,Erlang, Shell, commands, code, VM, werl, erl, eshell" />
<meta name="description" content="The Erlang shell (Eshell), its basic commands, how to get around in it. How to kill, start, connect to processes." />
<meta name="google-site-verification" content="mi1UCmFD_2pMLt2jsYHzi_0b6Go9xja8TGllOSoQPVU" />
<link rel="stylesheet" type="text/css" href="static/css/screen.css" media="screen" />
<link rel="stylesheet" type="text/css" href="static/css/sh/shCore.css" media="screen" />
<link rel="stylesheet" type="text/css" href="static/css/sh/shThemeLYSE2.css" media="screen" />
<link rel="stylesheet" type="text/css" href="static/css/print.css" media="print" />
<link href="rss" type="application/rss+xml" rel="alternate" title="LYSE news" />
<link rel="icon" type="image/png" href="favicon.ico" />
<link rel="apple-touch-icon" href="static/img/touch-icon-iphone.png" />
<link rel="apple-touch-icon" sizes="72x72" href="static/img/touch-icon-ipad.png" />
<link rel="apple-touch-icon" sizes="114x114" href="static/img/touch-icon-iphone4.png" />
<title>Starting Out | Learn You Some Erlang for Great Good!</title>
</head>
<body>
<div id="wrapper">
<div id="header">
<h1>Learn you some Erlang</h1>
<span>for great good!</span>
</div> <!-- header -->
<div id="menu">
<ul>
<li><a href="content.html" title="Home">Home</a></li>
<li><a href="faq.html" title="Frequently Asked Questions">FAQ</a></li>
<li><a href="rss" title="Latest News">RSS</a></li>
<li><a href="static/erlang/learn-you-some-erlang.zip" title="Source Code">Code</a></li>
</ul>
</div><!-- menu -->
<div id="content">
<div class="noscript"><noscript>Hey there, it appears your Javascript is disabled. That's fine, the site works without it. However, you might prefer reading it with syntax highlighting, which requires Javascript!</noscript></div>
<h2>开始尝试</h2>
<h3><a class="local" name="the-shell">Shell</a></h3>
<p>在Erlang的开发环境中,你可以用模拟器来测试你绝大部分想法;它可以执行你编译好的脚本,同时也准许你时时编辑你的代码。
在Linux中开启一个Erlang的shell非常简单,只需打开一个终端并输入<code>$ erl</code>就可以了。
如果你的Erlang环境已经被配置好,你将会看到以下信息:</p>
<pre class="brush:eshell">
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)
</pre>
<p>恭喜你,你已经成功的启动了Erlang的shell!</p>
<p>对于Windows用户,你依然可以执行<code>erl.exe</code>来启动shell,
但是我更建议用<code>werl.exe</code>来启动shell,该命令可以从开始菜单中找到(<code>程序 > Erlang</code>)。
Werl是针对Windows实现的shell,它具有独立的可滚动的窗口并且支持命令行编辑(像复制粘贴, 该功能在Windows的<code>cmd.exe</code>中非常不完善)。
即便你重定向输入输出或使用管道,你依然需要Erlang的shell。
(The erl shell is still required if you want to redirect standard input or output, or use pipelines.)</p>
<p>现在我们将进入模拟器并执行代码,但首先,让我们先看看shell提供了什么。</p>
<h3><a class="local" name="shell-commands">Shell命令</a></h3>
<p>Erlang的shell内置了一个基于Emacs的子集行编辑器,Emacs是一个从70年代就开始被使用且非常流行的编辑器。
如果你知道Emacs,你将会感到非常适应。对于其他人而言,不管如何你会一点点适应的。</p>
<img class="right" src="static/img/shell.png" width="312" height="143" alt="super turtle" title="In your face, Hare!" />
<p>首先,如果你输入了一些文本,接着你按了<code>^A</code> (Ctrl+A),你会发现光标移动到当前行的开头。
<code>^E</code> (Ctrl+E) 会让你的光标移动到行尾。你可以使用箭头键进行前进和后退,显示上一行或下一行,这样你可以重用之前的代码。</p>
<p>如果你输入 <code>li</code> 并按下TAB键,shell将会帮你补全为 <code>lists:</code>。 再按一次Tab键,shell将会给出稍后你可能会用到函数的建议。
这就是Erlang补全模块 <code>lists</code> 并给出模块内函数的方式。你也许会感到这种方式很奇怪,但是不用担心,很快你就会适应这种方式了。</p>
<p>我认为我们已经了解很多shell的功能,除了这个:我们如何退出!这里有一个找出如何做这件事情的方法。我们只需要输入 <code>help().</code> 这样你就能得一堆可以在shell中执行的命令的信息(不要忘记终止符号(<code>.</code>)因为想执行一个命令,这是必须的)。
有一些命令我们将在后面用到,但是目前我们只关注这一行<br />
<code>q() -- quit - shorthand for init:stop()</code><br />
这是其中的一种方法(事实上,有两种方法)。 但是当shell失去响应,这方法就不行了!如果你很细心,你会发现,当你启动Erlang的shell的时候,有一行提示'aborting with <code>^G</code>'.
让我们尝试下, 之后按下<code>h</code>来获得帮助!</p>
<pre class="brush:eshell">
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
-->
</pre>
<p>如果你按下<code>i</code>接着按下<code>c</code>,Erlang将停止当前正在运行的代码,并回到可响应的shell。
<code>j</code>将列出当前进程列表 (一个星号紧跟一个数字表示,这是当前正在运行的任务),这个正在执行的进程可以用<code>i</code>加上该进程的进程号进行中断。
如果你使用了<code>k</code>,你将杀掉shell进程,而不是中断它。按<code>s</code>可以创建一个新的shell进程</p>
<pre class="brush:eshell">
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!"
</pre>
<p>如果你再次阅读帮助信息,你会发现我们可以创建远程shell。现在我不会做更什么的介绍,但是已经可以让你明白Erlang的虚拟机除了可以执行代码之外还能做些什么。
(I won't get into details right now, but this should give you an idea of what the Erlang VM can do apart from running code.)
好了,让我们进行真正的尝试吧。</p>
<ul class="navigation">
<li><a href="introduction.html" title="Previous chapter">< Previous</a></li>
<li><a href="contents.html" title="Index">Index</a></li>
<li><a href="starting-out-for-real.html" title="Next chapter">Next ></a></li>
</ul>
</div><!-- content -->
<div id="footer">
<a href="http://creativecommons.org/licenses/by-nc-nd/3.0/" title="Creative Commons License Details"><img src="static/img/cc.png" width="88" height="31" alt="Creative Commons Attribution Non-Commercial No Derivative License" /></a>
<p>Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution Non-Commercial No Derivative License</p>
</div> <!-- footer -->
</div> <!-- wrapper -->
<div id="grass" />
<script type="text/javascript" src="static/js/shCore.js"></script>
<script type="text/javascript" src="static/js/shBrushErlang2.js%3F11"></script>
<script type="text/javascript">
SyntaxHighlighter.defaults.gutter = false;
SyntaxHighlighter.all();
</script>
</body>
</html>