我可以通过命令行或 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 文件。Erlang VM 加载代码路径中的所有模块。这包括本地目录。
来自http://www.erlang.org/doc/man/erl.html:
-run Mod [Func [Arg1, Arg2, ...]] (init flag) 使 init 调用指定的函数。Func 默认启动。如果没有提供参数,则假定该函数的参数为 0。否则,假定它的参数为 1,将列表 [Arg1,Arg2,...] 作为参数。所有参数都作为字符串传递。请参见初始化 (3)。
-s Mod [Func [Arg1, Arg2, ...]] (init flag) 使 init 调用指定的函数。Func 默认启动。如果没有提供参数,则假定该函数的参数为 0。否则,假定它的参数为 1,将列表 [Arg1,Arg2,...] 作为参数。所有参数都作为原子传递。请参见初始化 (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 运行时将在初始化时崩溃,产生一个神秘的错误消息(这表明函数未定义的事实)。
-run Mod [Func [Arg1, Arg2, ...]]
在系统初始化期间评估指定的函数调用。
Func
默认为start
. 如果没有提供参数,则假定该函数的元数为 0。否则,假定它的元数为 1,将列表[Arg1,Arg2,...]
作为参数。所有参数都作为字符串传递。如果引发异常,Erlang 会停止并显示错误消息。例子:
% erl -run foo -run foo bar -run foo bar baz 1 2
这将启动 Erlang 运行时系统并评估以下函数:
foo:start() foo:bar() foo:bar(["baz", "1", "2"]).
这些函数在初始化过程中按顺序执行,然后正常终止并将控制权交给用户。这意味着
-run
不返回的调用会阻止进一步的处理;为避免这种情况,请在这种情况下使用一些 spawn 变体。
erl -eval
如上一节所述,必须编译模块才能与-run
or一起使用-s
,因此要么erlc
在之前调用,要么添加-eval
到组合中。假设amod.erl
在erl
执行的同一个文件夹中
$ erl -eval 'compile:file(amod)' -run amod
这将下降到 Erlang shell 提示符。如果只需要启动 Erlang 运行时,请参见-noshell
(erl
手册页)。
来自init(3)
:
-eval Expr
Expr
在系统初始化期间扫描、解析和评估任意表达式。如果这些步骤中的任何一个失败(语法错误、解析错误或评估期间的异常),Erlang 将停止并显示错误消息。在以下示例中,Erlang 用作十六进制计算器:% erl -noshell -eval 'R = 16#1F+16#A0, io:format("~.16B~n", [R])' \\ -s erlang halt BF
如果指定了多个
-eval
表达式,则按照指定的顺序依次计算它们。表达式使用和函数调用-eval
顺序计算(这也是按照指定的顺序)。与和一样,不终止的评估会阻止系统初始化过程。-s
-run
-s
-run