将命令传递给erl?

时间:2012-04-01 15:53:31

标签: erlang erl

我们正在运行一个erlang程序(ejabberd)。有时,我们需要通过将erl shell连接到这个正在运行的erlang程序来进行运行状况检查。

我正在尝试编写所有这些脚本,而不是键入erl -sname r -remsh ....然后在erlang shell中输入我的命令,我正在寻找从我的bash shell直接执行该命令并获取输出的方法。这可能吗?

在Odobenus的回答之后,我写了这个小剧本:

#!/usr/bin/env escript
%%! -sname r -setcookie `cat ~ejabberd/.erlang.cookie`

main([]) -> 
    Res = rpc:call(ejabberd@xmpp,mnesia,info,[]),
    io:format("~p~n",[Res]).

问题是我收到“节点关闭”错误,即使这些错误与我用erl erl -sname r -remsh ejabberd@xmpp -setcookie `cat ~ejabberd/.erlang.cookie`连接的完全相同的句号:{{1}}

2 个答案:

答案 0 :(得分:1)

您可以为此目的编写escript http://www.erlang.org/doc/man/escript.html

种类(例如tst.erl)

#!/usr/bin/env escript
%%! -sname r 

main([Cookie]) -> 
    erlang:set_cookie(node(),list_to_atom(Cookie)),
    Res = rpc:call(name@somenode,somemodule,somefunction,[]),
    io:format("~p~n",[Res]).

并从bash脚本中调用它

./tst.erl `cat verythatfile`

答案 1 :(得分:0)

问题出在-sname参数中。使用全名-name node @ host,一切正常