この節ではErlangシェルで使える関数群を見ていきます。
今までの節と違って覚える必要は無く、リファレンスとして使うのがいいと思います。
Erlangシェルで使われるコマンドも全て関数の形となっています。
これらはBIFで実装されていますので、他の関数とほとんど同じです。違う点と言えば、
プログラムの中で利用するよりも、シェル上で利用されることが多いといった程度です。
この節で扱う関数はおもに2つのモジュールから構成されています。
c
shell
の2つです。細かいことはそれぞれのマニュアルを確認すれば良いので、 この節ではあくまでもよく使う関数にのみ説明を絞ります。
なお、どちらのモジュールに属する関数も自動インポートされているのでモジュール名を指定しなくても利用可能です。
h()
コマンドの履歴を表示する。
> h().
1: cd("/usr/local/erlang")
-> ok
2: ls()
-> ok
......
help()
ヘルプ情報を表示する。c,shellモジュールの関数を表示します。
> help().
** shell internal commands **
b() -- display all variable bindings
e(N) -- repeat the expression in query <N>
.....
history(N)
履歴として保存するコマンドの数をNに設定する。
i()
システムの状態を表示する
> i().
Pid Initial Call Heap Reds Msgs
Registered Current Function Stack
<0.0.0> otp_ring0:start/2 987 2692 0
......
ni()
ネットワークに関するシステムの情報を表示する。
q()
Erlangシェルを終了する。
> q().
ok
ada:~ yuichi$
v(N)
Nが正数の場合は履歴のN番目のコマンドの実行結果を得る。
Nが負数の場合はN回前のコマンドの実行結果を得る。
> v(2).
ok
> v(-2).
true
cd(Dir)
作業ディレクトリをDirに変更する。そして、変更後のディレクトリを表示する。
> cd("/usr/local/erlang").
/usr/local/erlang
ok
ls()
現在の作業ディレクトリの中にあるファイルを表示する。
> ls().
AUTHORS EPLICENCE Makefile.....
ok
ls(Dir)
指定されたディレクトリの中にあるファイルを表示する。
> ls("/usr/local/erlang/bin").
cerl dialyzer.....
ok
pwd()
現在の作業ディレクトリのパスを表示する。
> pwd().
/usr/local/erlang
ok
b()
束縛済み変数を全て表示する。
> b().
Atom1 = apple
Fun =
fun(X) ->
X + 1
end
Num1 = 3
ok
f()
束縛済み変数を全て忘れる。
> Num1 = 5.
** exception error: no match of right hand side value 5
> f().
ok
> Num1.
* 1: variable 'Num1' is unbound
f(X)
変数Xの束縛を解放する。
> f(Num1).
ok
bt(Pid)
プロセスの情報を表示する
> Pid = spawn(fun() -> receive X -> X end end).
<0.47.0>
15> bt(Pid).
Program counter: 0x01618f80 (erl_eval:receive_clauses/6 + 56)
CP: 0x001647f4 (<terminate process normally>)
arity = 0
0x0077348c Return addr 0x001647f4 (<terminate process normally>)
y(0) []
y(1) value
......
flush()
現在までにシェルに送られたメッセージを全て破棄する。
> flush().
ok
i(X,Y,Z)
プロセス<X,Y,Z>に関する情報の表示
> i(0,47,0).
[{current_function,{erl_eval,receive_clauses,6}},
{initial_call,{erlang,apply,2}},
{status,waiting},
{message_queue_len,0},
.......
pid(X,Y,Z)
X,Y,Zからプロセス<X,Y,Z>を作成する。
> Pid = spawn(fun() -> receive X -> X end end).
<0.65.0>
> Pid2 = pid(0,65,0).
<0.65.0>
> Pid =:= Pid2.
true
rd(R,D)
レコードをレコード名R、データ構造Dとして登録する。
> rd(item, {id,name,price}).
item
rf()
全てのレコード定義を忘れる
> rf().
[]
rf(R)
レコード定義Rを忘れる
> rf(item).
ok
rl()
登録されている全てのレコード定義を表示する。
> rl().
-record(item,{id,name,price}).
ok
rl(R)
レコード定義Rを表示する。
> rl(item).
-record(item,{id,name,price}).
ok
rr(File)
ファイルFileからレコード定義を読み取る。
詳しくはレコードの節を参照下さい。
c(File)
ファイルFileをコンパイルする。
1> c(mymath).
{ok,mymath}
c(File, Options)
オプションとしてリストOptionsを指定したコンパイル。
lc(Files)
リストFilesをまとめてコンパイルする。
m()
ロードされているモジュールを表示する。
> m().
Module File
application /usr/local/lib/erlang/lib/
kernel-2.12.2/ebin/application.beam
application_controll /usr/local/lib/erlang/lib/
kernel-2.12.2/ebin/application_controller.beam
......
m(Mod)
モジュールModに関わる情報
> m(c).
Module c compiled: Date: April 7 2008, Time: 18.29
........
nl(Module)
すべてのノードのモジュールをロードする。