Erlang World


top > first step > shell command

Shell Command

Erlangシェルで使われる関数について

この節ではErlangシェルで使える関数群を見ていきます。
今までの節と違って覚える必要は無く、リファレンスとして使うのがいいと思います。

Erlangシェルで使われるコマンドも全て関数の形となっています。 これらはBIFで実装されていますので、他の関数とほとんど同じです。違う点と言えば、 プログラムの中で利用するよりも、シェル上で利用されることが多いといった程度です。
この節で扱う関数はおもに2つのモジュールから構成されています。

c
shell

の2つです。細かいことはそれぞれのマニュアルを確認すれば良いので、 この節ではあくまでもよく使う関数にのみ説明を絞ります。

なお、どちらのモジュールに属する関数も自動インポートされているのでモジュール名を指定しなくても利用可能です。

マニュアル c
マニュアル shell

シェル自体に関するコマンド

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)
すべてのノードのモジュールをロードする。

Yuichi ITO. All rights reserved.
mail to : ad
inserted by FC2 system