用erl可执行文件执行单行命令?

时间:2014-10-22 13:05:29

标签: shell erlang

我想从命令行运行一些小的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脚本?

1 个答案:

答案 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