我使用的是erlang 21版本,当调用“erl”时,它会运行用户的.erlang文件来加载库的ebin文件。
当通过escript运行下面的脚本时,它不会调用。
#!/usr/bin/env escript
%% -*- erlang -*-
%%! -sname factorial -mnesia debug verbose
main([String]) ->
try
% io:format("~p",[lager_app:module_info()]),
io:format("aaaa"),
N = list_to_integer(String),
F = fac(N),
io:format("factorial ~w = ~w\n", [N,F])
catch
_:_ ->
usage()
end;
main(_) ->
usage().
usage() ->
io:format("aaaa\n~p",[lager_app:module_info()]),
io:format("usage: factorial integer\n"),
halt(1).
fac(0) -> 1;
fac(N) -> N * fac(N-1).
错误消息如下:
yuchen@chenyu-Vostro-5468:~/a$ ./factorial
escript: exception error: undefined function lager_app:module_info/0
1条答案
按热度按时间6ojccjat1#
要解决关于“.erlang.cookie必须由所有者访问”的错误,这是在这篇文章的标题中提到的,您需要将cookie权限更改为600。您可以使用以下命令:
chmod 600 ~/.erlang.cookie
在你的帖子的正文中显示的另一个错误消息是“undefined function lager_app:module_info/0”,这意味着你没有正确设置lager。如果你用
lager_app
注解掉这一行,你应该可以通过这个错误。这里是关于setting up lager的文档。看起来你需要在
rebar.config
和app.config
中配置它,并且在使用它之前还需要调用lager:start()
。希望这能帮上忙。