如何让escript使用用户的.erlang文件?

n3ipq98p  于 2023-04-10  发布在  Erlang
关注(0)|答案(1)|浏览(244)

我使用的是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
6ojccjat

6ojccjat1#

要解决关于“.erlang.cookie必须由所有者访问”的错误,这是在这篇文章的标题中提到的,您需要将cookie权限更改为600。您可以使用以下命令:chmod 600 ~/.erlang.cookie
在你的帖子的正文中显示的另一个错误消息是“undefined function lager_app:module_info/0”,这意味着你没有正确设置lager。如果你用lager_app注解掉这一行,你应该可以通过这个错误。
这里是关于setting up lager的文档。看起来你需要在rebar.configapp.config中配置它,并且在使用它之前还需要调用lager:start()
希望这能帮上忙。

相关问题