- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要从 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/
我是一名优秀的程序员,十分优秀!