从具有复杂参数的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可能会更直接. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |