Erlang:从命令行调用erl -eval永远不会退出

时间:2013-06-01 10:46:25

标签: erlang erlang-shell erl

我有一个简单的Erlang命令,我想通过erl -eval调用(编译erlydtl模板,如erlydtl page所述)。

当我从shell以交互方式执行时,一切正常,命令立即退出:

erl -pa ebin deps\erlydtl\ebin Eshell V5.9.3.1  (abort with ^G) 
1> erlydtl:compile('templates/tictactoe.dtl',tictactoe_dtl,[{out_dir,'ebin'}]).
ok

但是当我尝试通过erl -eval(我想从.bat文件运行它)时:

erl -pa ebin deps\erlydtl\ebin -noshell -eval erlydtl:compile('templates/tictactoe.dtl',tictactoe_dtl,[{out_dir,'ebin'}])

然后该命令完成其工作(模板已编译)但它不会退出,我需要使用ctrl + c手动终止shell进程(我在Windows下工作)。

我只想要命令编译模板并退出。可能是什么问题?

更新

一个解决方案可能是在命令末尾添加exit()调用,但最后我得到了以下内容:

erl -pa ebin deps\erlydtl\ebin -noshell -eval erlydtl:compile('templates/tictactoe.dtl',tictactoe_dtl,[{out_dir,'ebin'}]),exit(success).
{"init terminating in do_boot",success}

Crash dump was written to: erl_crash.dump
init terminating in do_boot (success)

错误信息非常烦人,所以我仍然不喜欢这个解决方案。

2 个答案:

答案 0 :(得分:5)

这应该可以解决问题

erl -noshell -eval 'c:ls()' -eval 'init:stop()'

你必须告诉vm关闭。

答案 1 :(得分:-1)

你需要指定-noshell并在结尾调用halt()。例如

erl -noshell -eval "erlydtl:compile('templates/tictactoe.dtl',tictactoe_dtl,[{out_dir,'ebin'}]),halt()."