1.概述:

作为程序员对于脚本语言应该很熟悉了,脚本语言的优点很多,如快速开发、容易编写、实时开发和执行, 我们常用的脚本有Javascript、shell、python等,我们的erlang语言也有支持脚本运行的工具---escript,它支持在不编译的情况下,直接从命令行运行代码。

2. 示例:

编写了一个使用escript来解析application文件的脚本代码,为了读取vsn字段,如下:

 #!/usr/bin/env escript              %%% 和其他脚本语言一样,如果脚本未设置,将不可执行

 %% -*- erlang -*-
%%! -smp enable -sname app-test -mnesia debug verbose %%% erlang模拟器的参数 -module('app-test').
-mode(compile). %%%脚本语言一般都是解释性语言,而解释执行一般都比编译执行要慢,加上这一句,强制脚本编译。

main(AppFiles) -> %%% escript要求必须有main函数作为入口函数。
ConsistentRstate = lists:foldl(fun
(Rstate, nil) -> Rstate;
(Rstate, Rstate) -> Rstate;
(Rstate, PreviousRstate) ->
io:format(standard_error, "Inconsistent R-States: ~p and ~p~n", [Rstate, PreviousRstate]),
throw(error)
end,
nil,
lists:map(fun
(Filename) ->
{ok, [{application, _Application, Properties}]} = file:consult(Filename),
{vsn, Rstate} = lists:keyfind(vsn, 1, Properties),
Rstate
end,
AppFiles)),
io:format("~s~n", [ConsistentRstate]).
%%% appfile.appSrc 文件,是一个application文件

{application, test,
[
{id, "testId"},
{vsn, "version001"},
{modules, "&modules&"},
{mod, {sysApp, {sysAppCB, []}}},
{description, "this is a test application"},
{maxP, infinity}, % infinity | integer()
{maxT, infinity}, % infinity | integer()
{registered, []}, % [Name1, Name2|...]
{applications, []}, % [Appl1, Appl2|...]
{included_applications, []}, % [Appl1, Appl2|...]
{env, []}
]}.
 ~/test_tmp> chmod +x app-test.escript
~/test_tmp> ./app-test.escript appfile.appSrc
version001 也可以这样执行.erl .beam .zip ~/test_tmp> cat test.erl
-module(test).
-export([main/]). main([List]) ->
io:format("this is a test module: ~p~n", [List]). ~/test_tmp>
~/test_tmp> escript test.erl testtest
this is a test module: "testtest"
~/test_tmp>
~/test_tmp> erlc test.erl
~/test_tmp> escript test.beam testtest11
this is a test module: "testtest11"

以上是关于escript的简述。如有误,望指正。

erlang的脚本执行---escript的更多相关文章

  1. erlang虚拟机代码执行原理

     转载:http://blog.csdn.NET/mycwq/article/details/45653897 erlang是开源的,很多人都研究过源代码.但是,从erlang代码到c代码,这是个不小 ...

  2. 第9章 Shell基础(1)_Shell简介和脚本执行方式

    1. Shell概述 1.1 Shell简介 (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编 ...

  3. MonoBehaviour Lifecycle(生命周期/脚本执行顺序)

    脚本执行顺序 前言 搭建一个示例来验证Unity脚本的执行顺序,大概测试以下部分: 物理方面(Physics) 渲染(Scene rendering) 输入事件(InputEvent) 流程图 Uni ...

  4. Shell文件权限和脚本执行

    一.预备知识 1.shell的作用   2.常识 (1)Tab键自动补全   使用Terminal时,输入命令的前几个字母,敲tab会自动补全命令或文件名.目录等. 好处:操作速度更快:不容易出错: ...

  5. python脚本执行Scapy出现IPv6警告WARNING解决办法

    安装完scapy,写了脚本执行后执行: WARNING: No route found for IPv6 destination :: (no default route?) 原因是用 from sc ...

  6. Linux脚本执行过程重定向

    Linux脚本执行过程重定向 一.bash调试脚本,并将执行过程重定向到指定文件 bash –x  shell.sh 2>&1 | tee shell.log

  7. PowerDesigner16.5 生成SQL脚本执行出错:collate chinese_prc_ci_as

    PowerDesigner16.5 生成SQL脚本执行出错, collate chinese_prc_ci_as 点DataBase-edit current dbms —— 左边Script - O ...

  8. sh脚本执行Java程序

    1.不引用Jar包或者资源文件夹 最简单的程序Hello World. 首先创建Hello.java public class Hello { public static void main(Stri ...

  9. crontab 中 python(cx_Oracle)脚本执行时需要用户环境变量,怎么办??

    import cx_Oracle Traceback (most recent call last): File "", line 1, in ? ImportError: lib ...

随机推荐

  1. linux下使用异步通知

    阻塞式I/O是一直等待直到设备可以访问,非阻塞式I/O是定期轮询设备是否可以访问. 异步通知则是当设备可以访问时才主动通知应用程序,有点像设备的硬中断. 并不是所有的设备都支持异步通知,应用程序通常假 ...

  2. ActivityManagerService启动过程分析

    之前讲Android的View的绘制原理和流程的时候,讲到过在Android调用setContentView之后,Android调用了一个prepreTravle的方法,这里面就提到了Activity ...

  3. PHP中关于foreach的简单的用法总结

    在php中使用循环方式输出数组里面的内容有好多种方式,我们既可以采用数组迭代循环的方式,当然也可以采用下面的foreach方法,日常开发中用到的最多就是它.下面我们就先看一下它的用法吧: //语法是: ...

  4. VB.NET版机房收费系统---异常处理

    异常处理,英文名为Exceptional Handling, 那时年少,还记得那年一起学习过的VB6.0的时候,常常使用ONError的错误语句.与传统VB6.0中的OnError语句相比.NET平台 ...

  5. Android学习之旅-android系统服务的启动过程以及分类(90)

    读了android开发精要这本书,所以我把书中的比较精彩的地方截图了,一块分享一下

  6. Leetcode_49_Anagrams

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42744709 Given an array of stri ...

  7. Linux用户配置文件(第二版)

    /etc/passwd文件剖析 文件格式: root:x:0:0:root:/root:/bin/bash 用户名:密码位:UID:GID[缺省组ID]:注释性的描述信息:宿主目录:shell[7部分 ...

  8. cocos2d-x 游戏开发之有限状态机(FSM) (四)

    cocos2d-x 游戏开发之有限状态机(FSM) (四) 虽然我们了解了FSM,并且可以写自己的FSM,但是有更好的工具帮我们完成这个繁琐的工作.SMC(http://smc.sourceforge ...

  9. 使用 Linux 的 strace 命令跟踪/调试程序的常用选项

    原文:http://linoxide.com/linux-command/linux-strace-command-examples/作者: Raghu 在调试的时候,strace能帮助你追踪到一个程 ...

  10. 集群增量会话管理器——DeltaManager

    DeltaManager会话管理器是tomcat默认的集群会话管理器,它主要用于集群中各个节点之间会话状态的同步维护,由于相关内容涉及到集群,可能会需要一些集群通信相关知识,如果有疑问可结合集群相关章 ...