2010-11-27 7 views
6

Datei kann ich eine Erlang-Datei entweder über die Kommandozeile oder Bash-Skript starten:Erlang: Kommandozeile Funktion starten innerhalb einer Erl

exec erl file.erl 

Aber ich kann nicht scheinen, um herauszufinden, wie man direkt eine Funktion starten innerhalb dieser Datei.

z.B.

exec erl file.erl -f function() 

Alle geschätzt Vorschläge ...

Antwort

13

, was Sie wahrscheinlich wollen erl -s module_name function_name

Beachten Sie, dass Sie nie die erlang-Datei im erl Befehl angeben, wie Sie in Ihrem Beispiel dort taten. Die Erlang-VM lädt alle Module im Codepath. Das schließt das lokale Verzeichnis ein.

Von http://www.erlang.org/doc/man/erl.html:

-run Mod [Func [arg1, Arg2, ...]] (init-Flag) macht init die angegebene Funktion aufrufen. Func startet standardmäßig. Wenn keine Argumente zur Verfügung gestellt werden, wird die Funktion angenommen von arity seine 0. Andernfalls wird angenommen, von arity 1 sein, wobei die Liste [arg1, Arg2, ...] als Argument. Alle Argumente werden als Strings übergeben. Siehe init (3).

-s Mod [Func [Arg1, Arg2, ...]] (INIT-Flag) Makes init die angegebene Funktion aufrufen. Func startet standardmäßig. Wenn keine Argumente angegeben werden, wird die -Funktion als 0 angenommen. Andernfalls wird angenommen, dass sie 1 ist, wobei die Liste [Arg1, Arg2, ...] als Argument genommen wird. Alle Argumente werden als Atome übergeben. Siehe init (3).

+0

Danke Jon! Wie immer ziehen Sie durch :) –

+3

Auch. Wenn Sie ein Befehlszeilen-Tool erstellen, überprüfen Sie escript. Es ist ein ziemlich nettes Werkzeug in der Kriegskassette. http://www.erlang.org/doc/man/escript.html –

+2

Es gibt auch '-eval' für den Fall, dass Sie diese Funktion mit einem anderen Argument als einer Liste von Strings oder Atomen starten müssen. Oh, und Sie könnten '-noshell' hinzufügen, um zu verhindern, dass sich die interaktive Shell öffnet, und möglicherweise '-s init stop' am Ende hinzufügen, um Erlang tatsächlich zu beenden, wenn die Funktion fertig ist. – ndim