Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在启动Erlang shell/节点时运行自定义函数?(即,`.erl`文件中的函数)_Bash_Command Line_Erlang_Erlang Shell - Fatal编程技术网

Bash 如何在启动Erlang shell/节点时运行自定义函数?(即,`.erl`文件中的函数)

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默认为启动。如果 未提供任何参数,则

我可以通过命令行或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默认为启动。如果 未提供任何参数,则 函数被假定为算术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