从具有复杂参数的unix shell运行erlang

前端之家收集整理的这篇文章主要介绍了从具有复杂参数的unix shell运行erlang前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要从unix shell运行复杂的erlang模块函数
rpc:call('node@example.com',mnesia,dirty_first,[mytable])

我该怎么做?

UPD:

我做test.escript

chmod x test.escript

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

并收到{badrpc,nodedown}

但是跑的时候

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

我的意思是它有效,但如何使escript工作真正的?

我认为 escript可能值得一试.

编辑:
一些例子.

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

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

Escript

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

EVAL

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

这会创建一个shell,在这种情况下可能不是你想要的.

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

在做完这些例子并再次阅读你的问题之后,我认为我提出的可行建议将是你最好的选择,erl_call.我对“问题”中的“复杂”这个词感到沮丧,其中imho escripts以易于阅读的方式允许更多“复杂”的设置. escript示例中的变量_String保存脚本的参数,允许您通过shell访问输入并在EVM中执行复杂的erlang操作.但是如果你已经在其他应用程序中拥有逻辑并且只需要对erlang节点进行这种简单调用,那么erl_call可能会更直接.

原文链接:https://www.f2er.com/bash/387160.html

猜你在找的Bash相关文章