erlang的脚本执行---escript
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的更多相关文章
- erlang虚拟机代码执行原理
转载:http://blog.csdn.NET/mycwq/article/details/45653897 erlang是开源的,很多人都研究过源代码.但是,从erlang代码到c代码,这是个不小 ...
- 第9章 Shell基础(1)_Shell简介和脚本执行方式
1. Shell概述 1.1 Shell简介 (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编 ...
- MonoBehaviour Lifecycle(生命周期/脚本执行顺序)
脚本执行顺序 前言 搭建一个示例来验证Unity脚本的执行顺序,大概测试以下部分: 物理方面(Physics) 渲染(Scene rendering) 输入事件(InputEvent) 流程图 Uni ...
- Shell文件权限和脚本执行
一.预备知识 1.shell的作用 2.常识 (1)Tab键自动补全 使用Terminal时,输入命令的前几个字母,敲tab会自动补全命令或文件名.目录等. 好处:操作速度更快:不容易出错: ...
- python脚本执行Scapy出现IPv6警告WARNING解决办法
安装完scapy,写了脚本执行后执行: WARNING: No route found for IPv6 destination :: (no default route?) 原因是用 from sc ...
- Linux脚本执行过程重定向
Linux脚本执行过程重定向 一.bash调试脚本,并将执行过程重定向到指定文件 bash –x shell.sh 2>&1 | tee shell.log
- PowerDesigner16.5 生成SQL脚本执行出错:collate chinese_prc_ci_as
PowerDesigner16.5 生成SQL脚本执行出错, collate chinese_prc_ci_as 点DataBase-edit current dbms —— 左边Script - O ...
- sh脚本执行Java程序
1.不引用Jar包或者资源文件夹 最简单的程序Hello World. 首先创建Hello.java public class Hello { public static void main(Stri ...
- crontab 中 python(cx_Oracle)脚本执行时需要用户环境变量,怎么办??
import cx_Oracle Traceback (most recent call last): File "", line 1, in ? ImportError: lib ...
随机推荐
- HttpClient 解决中文乱码
public static String httpGet(String url) { try { HttpGet httpGet = new HttpGet(url); HttpClient clie ...
- iOS学习新知识-加速计和陀螺仪
一.CoreMotion框架介绍 我们知道有一些iOS的应用,会有一些特殊的要求,比如: 电子罗盘指南针之类的应用:让我们知道方向. 运动类型软件:让我们知道我们跑步多少公里. 社交软件中的摇一摇功能 ...
- PHP解决中文乱码问题
初学PHP,在汉字页面间传输和转换的时候,遇到了中文乱码问题. 究其原因乱码无外乎以下几种情况: 1.html页本身的乱码问题, 解决方法:纯html页使用<meta http-equiv=&q ...
- C语言中,#include <>和#include ""的区别和注意点
C语言中包含文件有两种包含符号,一个是<>尖括号,另一个是""双引号.那么这两个有什么区别呢? 首先在本地建立一个空文件,命名为stdio.h. 然后再建立一个C文件, ...
- thinkpad x260在ubuntu 14.04lts wifi驱动安装 ( ubuntu iwlwifi驱动 都可行 )
实验室要新购笔记本x260,用于ROS调试,装上ubuntu-ros后,发现wifi不支持. 查阅大量资料,如下: http://www.ubuntu.com/certification/hardwa ...
- 监控系统的多协议直播(RTSP RTMP HTTP Live Streaming)
监控系统的多协议直播(RTSP RTMP HTTP Live Streaming)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十三)
游戏特效部分就先这样了,因为毕竟是Lite版本,而且是第一个App,所以咱们把主要精力放在游戏可玩逻辑上吧(虽然已经厚颜无耻的加了不少特效了). 说句题外话:游戏美工是独立开发者不可逾越的鸿沟,是无法 ...
- Cocos2D中相关问题提问的几个论坛
如果和SpriteBuilder相关可以到: http://forum.spritebuilder.com 提问. 如果是Cocos2D的问题,则可以到以下论坛询问: http://forum.coc ...
- SpriteBuilder中节点的%位置移动
在SpriteBuilder中可以将一个节点的位置设为%形式,这意味着在不同的屏幕尺寸中,该节点会定位在相对同一个位置. 比如x和y分别为 50%和50%的位置,在各种屏幕中都会定位到屏幕的中心. 但 ...
- 【matlab编程】Matlab版扫雷
我发现有些人平常闲着的时候会玩window自带的游戏,其中最常见的就是扫雷和纸牌.本来想用matlab编写全自动扫雷程序用来作弊,可是后来发现扫雷问题是NP完全问题(正如:旅行商NP难问题一样不能被解 ...