我想从命令行运行一些小的Erlang函数。
例如,要在python中打印日期,我可以使用:
python -c 'import time; print (time.strftime("%d/%m/%Y"))'
我希望能够与Erlang类似:
erl -s 'date().'
但是,我收到以下错误:
Erlang/OTP 17 [erts-6.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
{"init terminating in do_boot",{undef,[{'date().',start,[],[]},{init,start_it,1,[]},{init,start_em,1,[]}]}}
Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
是否可以从命令行运行小型Erlang脚本?
答案 0 :(得分:4)
您可以使用eval
选项从命令行运行小型Erlang程序。例如:
erl -noinput -eval 'io:format("hello world~n").' -s init stop
您可以阅读the erl
man page以获取有关命令行选项的更多详细信息,但请简要说明:
-noinput
表示运行时没有任何内容可供阅读-eval
将其参数视为要评估和执行的Erlang代码文本-s init stop
执行the init:stop/0
function以关闭运行时要打印当前日期和时间,您可以采取类似的方法:
erl -noinput -eval '{{Y,Mo,D},{H,Mi,S}} = calendar:now_to_local_time(os:timestamp()),
io:format("~4.4w-~2.2.0w-~2.2.0w ~2.2.0w:~2.2.0w:~2.2.0w~n",[Y,Mo,D,H,Mi,S]).' -s init stop
此代码使用os:timestamp/0
检索当前时间,通过calendar:now_to_local_time/1
将其转换为当地时间,然后使用io:format/2
格式化结果,生成如下结果:
2014-10-22 10:09:53