開始

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,可以在您的開始選單中找到它 (程式集 > Erlang)。Werl 是 Erlang shell 的 Windows 專用實作,它有自己的視窗,帶有捲軸並支援命令列編輯(例如複製貼上,這在 Windows 的標準 cmd.exe shell 中會很麻煩)。如果您想重新導向標準輸入或輸出,或使用管道,仍然需要 erl shell。

我們將能夠在模擬器中輸入並執行程式碼,但首先,讓我們看看如何操作它。

Shell 命令

Erlang shell 有一個內建的行編輯器,基於 Emacs 的一個子集,Emacs 是一個自 70 年代以來就廣泛使用的流行文字編輯器。如果您知道 Emacs,您應該沒問題。對於其他人,您也會沒事的。

super turtle

首先,如果您輸入一些文字,然後按下 ^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 除了執行程式碼之外還能做什麼。現在,讓我們開始 (真的)。