2

( erlydtl ページerl -evalで説明されているように、erlydtl テンプレートをコンパイルするために)経由​​で呼び出したい単純な Erlang コマンドがあります。

シェルからインタラクティブに実行すると、すべてが正常に機能し、コマンドはすぐに終了します。

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 で作業しています)。

コマンドでテンプレートをコンパイルして終了するだけです。何が問題なのですか?

アップデート:

1 つの解決策は、コマンドの最後に 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)

エラーメッセージは非常にイライラするので、私はまだこの解決策が好きではありません.

4

2 に答える 2

8

これでうまくいくはずです

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

VM にシャットダウンを指示する必要があります。

于 2013-06-01T10:59:35.150 に答える
-1

最後に -noshell を指定し、halt() を呼び出す必要があります。例えば

erl -noshell -eval "erlydtl:compile('templates/tictactoe.dtl',tictactoe_dtl,[{out_dir,'ebin'}]),halt()."
于 2013-06-01T18:51:52.057 に答える