gpt4 book ai didi

erlang - 如何从具有复杂参数的 unix shell 运行 Erlang?

转载 作者:行者123 更新时间:2023-12-01 09:37:50 26 4
gpt4 key购买 nike

我需要从 unix shell 运行复杂的 Erlang 模块函数

rpc:call('node@example.com', mnesia, dirty_first, [mytable])

我该怎么做?

更新:

我制作 test.escript

chmod +x test.escript

#!/usr/lib64/erlang/bin/escript
%%! -name 'test@example.com'
main(_Args) ->
R = rpc:call('node@example.com', mnesia, dirty_first, [mytable]),
io:format("~p~n",[R]).

并接收 {badrpc, nodedown}

但是当运行时

erl -name test@example.com
1> rpc:call('node@example.com', mnesia, dirty_first, [mytable]).
{my, data}.

我的意思是它可以工作,但是如何使 escript 正常工作?

最佳答案

我认为 escript可能是值得研究的东西。

编辑:一些例子。

首先是所有示例:以某种方式在某处启动远程节点。

            dannib@duval:~:> erl -sname bar
(bar@duval)1> erlang:get_cookie().
'KNKKCFPYMJUPIOLYPOAA'

脚本

1:创建一个名为hello.escript的文件,内容为

            #!/usr/bin/env escript
%%! -sname foo@duval -setcookie KNKKCFPYMJUPIOLYPOAA

main(_String) ->
Node = 'bar@duval',
Mod = 'erlang',
Fun = 'node',
Args = [],
R = rpc:call(Node, Mod, Fun, Args),
io:format("Hello there ~p~n",[R]).

注意 %%! -sname foo@bar 标识主机上的节点(而不是创建nonode@nohost),允许设置相同的cookie %%! -sname foo@duvel -setcookie KNKKCFPYMJUPIOLYPOAA 作为目标主机,解决了获取{badrpc,nodedown}的问题。请注意,相同的语句适用于以下示例(erl_call 和 -eval),其中设置了节点名称和 cookie。

2:设置执行位并运行

            $ chmod +x hello.escript
$ ./hello.escript
Hello there bar@duval

Erl_call

1:运行

            $ erl_call -c 'KNKKCFPYMJUPIOLYPOAA' -a 'erlang node' -n bar@duval
bar@duval

评估

1:运行

            $ erl -sname foo -setcookie 'KNKKCFPYMJUPIOLYPOAA' 
-eval 'io:format("Hello there ~p~n",[rpc:call(bar@duval,erlang, node, [])])'
... Eshell V5.7.4 (abort with ^G)
(foo@duval)1> Hello there bar@duval

这会创建一个外壳,在这种情况下可能不是您想要的。

我可能会提到,如果两个节点位于同一主机上并使用相同的 cookie 默认值,则不必像示例中那样显式设置 foo 和 bar 的 cookie 值。

在完成这些示例并再次阅读您的问题后,我认为我给出的糟糕建议将是您的最佳选择,erl_call。我喜欢问题标题中的“复杂”一词,恕我直言,脚本允许以易于阅读的方式进行更多“复杂”设置。 escript 示例中的变量 _String 保存脚本的参数,它允许您通过 shell 访问输入并在 EVM 中执行复杂的 erlang 操作。但是 erl_call 可能更直接,如果您已经在其他应用程序中有逻辑并且只需要对 erlang 节点进行这个简单的调用。

关于erlang - 如何从具有复杂参数的 unix shell 运行 Erlang?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4525506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com