Bash 如何在启动Erlang shell/节点时运行自定义函数?(即,`.erl`文件中的函数)
我可以通过命令行或bash脚本启动Erlang文件:Bash 如何在启动Erlang shell/节点时运行自定义函数?(即,`.erl`文件中的函数),bash,command-line,erlang,erlang-shell,Bash,Command Line,Erlang,Erlang Shell,我可以通过命令行或bash脚本启动Erlang文件: exec erl file.erl 但是,我似乎无法找到如何在这个文件中直接启动函数 e、 g 感谢您的建议……您可能想要的是erl-s模块\u name函数\u name 请注意,您从未像在示例中那样在erl命令中指定erlang文件。Erlang VM加载代码路径中的所有模块。包括本地目录 发件人: -运行Mod[Func[Arg1,Arg2,…] (init标志)使init调用指定的 功能。Func默认为启动。如果 未提供任何参数,则
exec erl file.erl
但是,我似乎无法找到如何在这个文件中直接启动函数
e、 g
感谢您的建议……您可能想要的是
erl-s模块\u name函数\u name
请注意,您从未像在示例中那样在erl命令中指定erlang文件。Erlang VM加载代码路径中的所有模块。包括本地目录
发件人:
-运行Mod[Func[Arg1,Arg2,…]
(init标志)使init调用指定的
功能。Func默认为启动。如果
未提供任何参数,则
函数被假定为算术0。
否则,它被假定为相等
1,将列表[Arg1,Arg2,…]作为
论点所有参数都作为
串。见init(3)
-s Mod[Func[Arg1,Arg2,…]
(init标志)使init调用指定的
功能。Func默认为启动。如果
未提供任何参数,则
函数被假定为算术0。
否则,它被假定为相等
1,将列表[Arg1,Arg2,…]作为
论点所有参数都作为
原子。见init(3)
这本书似乎有例子,有时还有更好的描述。也有一些很好的例子
此外,以下选项并非相互排斥。-run
、-s
和-eval
开关可以混合使用
选项1:erl-run
或erl-s
描述了-s
和-run
开关(
文本相同),但示例如所示(请参见下面的方框引用)
警告:
被调用的模块必须已经编译,否则Erlang运行时将在init上崩溃,产生一条神秘的错误消息(这表明函数未定义)
在系统初始化期间计算指定的函数调用。
Func
默认为start
。如果未提供任何参数,则函数
假定为arity 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
选项2:erl-eval
如上一节所述,必须编译模块才能与-run
或-s
一起使用,因此可以在前面调用erlc
,或者将-eval
添加到混合中。假设amod.erl
位于执行erl
的同一文件夹中
$ erl -eval 'compile:file(amod)' -run amod
这将转到Erlang shell提示符。如果只需要启动Erlang运行时,请参见-noshell
()
发件人:
在执行过程中扫描、解析和计算任意表达式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
一样,这是一种没有
终止阻止系统初始化过程
谢谢你,乔恩!和往常一样,你也挺过来了。如果要制作命令行工具,请查看escript。这是一个很好的工具,放在战争箱里。还有
-eval
,以防需要使用字符串或原子列表以外的参数启动该函数。哦,您可能需要添加-noshell
,以防止交互式shell打开,并可能在函数结束时添加-s init stop
,以实际退出Erlang。jon和ndim。。。谢谢你的额外提示。绝对有用,并且符合我的想法。
$ erl -eval 'compile:file(amod)' -run amod
-eval Expr
% erl -noshell -eval 'R = 16#1F+16#A0, io:format("~.16B~n", [R])' \\
-s erlang halt
BF