コマンドラインまたはbashスクリプトのいずれかを介してErlangファイルを開始できます。
exec erl file.erl
しかし、このファイル内で関数を直接開始する方法がわからないようです。
例えば
exec erl file.erl -f function()
どんな提案もありがたい...
コマンドラインまたはbashスクリプトのいずれかを介してErlangファイルを開始できます。
exec erl file.erl
しかし、このファイル内で関数を直接開始する方法がわからないようです。
例えば
exec erl file.erl -f function()
どんな提案もありがたい...
あなたがおそらく欲しいのはerl -s module_name function_name
例で行ったように、erlコマンドでerlangファイルを指定しないことに注意してください。ErlangVMはコードパス内のすべてのモジュールをロードします。これにはローカルディレクトリが含まれます。
http://www.erlang.org/doc/man/erl.htmlから:
-run Mod [Func [Arg1、Arg2、...]] (initフラグ)initに指定された関数を呼び出させます。Funcはデフォルトで開始します。引数が指定されていない場合、関数はアリティ0であると見なされます。それ以外の場合は、リスト[Arg1、Arg2、...]を引数としてアリティ1であると見なされます。すべての引数は文字列として渡されます。init(3)を参照してください。
-s Mod [Func [Arg1、Arg2、...]] (initフラグ)initに指定された関数を呼び出させます。Funcはデフォルトで開始します。引数が指定されていない場合、関数はアリティ0であると見なされます。それ以外の場合は、リスト[Arg1、Arg2、...]を引数としてアリティ1であると見なされます。すべての引数はアトムとして渡されます。init(3)を参照してください。
erl
マニュアルページ][1] shows all the command line options, but [
のinit(3) `には例があり、場合によってはより適切な説明があるようです。この投稿にもいくつかの良い例があります。
また、以下のオプションは相互に排他的ではありません。、、、およびスイッチを混在させることができます-run
。-s
-eval
erl -run
またはerl -s
erl
マニュアルページでは-s
とスイッチについて説明してい-run
ます(テキストは同じです)が、例はにありますinit(3)
(以下のブロック引用を参照)。
警告:
呼び出されたモジュールはすでにコンパイルされている必要があります。そうしないと、Erlangランタイムがinitでクラッシュし、不可解なエラーメッセージが生成されます(関数が未定義であることを示します)。
-run Mod [Func [Arg1, Arg2, ...]]
システムの初期化中に、指定された関数呼び出しを評価します。
Func
デフォルトはstart
。引数が指定されていない場合、関数はアリティ0であると見なされます。それ以外の場合は、リスト[Arg1,Arg2,...]
を引数として、アリティ1であると見なされます。すべての引数は文字列として渡されます。例外が発生した場合、Erlangはエラーメッセージで停止します。例:
% erl -run foo -run foo bar -run foo bar baz 1 2
これにより、Erlangランタイムシステムが起動し、次の関数が評価されます。
foo:start() foo:bar() foo:bar(["baz", "1", "2"]).
関数は初期化プロセスで順次実行され、初期化プロセスは通常どおり終了し、ユーザーに制御を渡します。これは、
-run
返されない呼び出しがそれ以上の処理をブロックすることを意味します。これを回避するには、このような場合にスポーンのバリアントを使用します。
erl -eval
上記のセクションで述べたように、モジュールは-run
または-s
で使用するためにコンパイルする必要があるため、前に呼び出すか、ミックスerlc
に追加します。が実行されるのと同じフォルダにある-eval
と仮定しますamod.erl
erl
$ erl -eval 'compile:file(amod)' -run amod
これはErlangシェルプロンプトにドロップします。Erlangランタイムのみを起動する必要がある場合は、-noshell
(erl
manページ)を参照してください。
差出人init(3)
:
-eval Expr
Expr
システムの初期化中に任意の式をスキャン、解析、および評価します。これらのステップのいずれかが失敗した場合(構文エラー、解析エラー、または評価中の例外)、Erlangはエラーメッセージで停止します。次の例では、Erlangを16進計算機として使用しています。% erl -noshell -eval 'R = 16#1F+16#A0, io:format("~.16B~n", [R])' \\ -s erlang halt BF
複数の
-eval
式が指定されている場合、それらは指定された順序で順番に評価されます。-eval
式は-s
、-run
関数呼び出しで順番に評価されます(これも指定された順序で)。-s
およびと同様に-run
、終了しない評価はシステム初期化プロセスをブロックします。