二郎神:从命令行调用ERL -eval永远不会退出(Erlang: invoking erl -ev

2019-10-29 11:36发布

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

当我这样做,从交互外壳一切正常,并立即命令退出:

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(我在Windows下工作)手动终止shell进程。

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

更新:

一种解决方案可以在命令结束时附加出口()调用,但然后我结束了以下内容:

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)

该错误消息是很让人讨厌,所以我还是不喜欢这种解决方案。

Answer 1:

这应该做的伎俩

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

你必须告诉虚拟机关闭。



Answer 2:

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

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


文章来源: Erlang: invoking erl -eval from command line never exits