escript Erlang scripting support, 可以让erl模块转身变成unix script来使用,大大方便用户,具体的使用参看otp文档。我这里要演示的是些比较被忽视的高级特性:
首先crack erts/etc/common/escript.c:33 static int debug = 1; 让之显示调用参数。
root@nd-desktop:~# cat >factorial
#!/usr/bin/env escript
%% -*- erlang -*-
%%! -smp enable -sname factorial -mnesia debug verbose
main([String]) ->
try
N = list_to_integer(String),
F = fac(N),
io:format("factorial ~w = ~w\n", [N,F])
catch
_:_ ->
usage()
end;
main(_) ->
usage().
usage() ->
io:format("usage: factorial integer\n"),
halt(1).
fac(0) -> 1;
fac(N) -> N * fac(N-1).
CTRL+D
root@nd-desktop:~# chmod +x factorial
root@nd-desktop:~# ./factorial 10
erl +B -boot start_clean -noshell -smp enable -sname factorial -mnesia debug verbose -run escript start -extra ./factorial 10
factorial 10 = 3628800
特性1:
摘抄文档。。。
On the third line (or second line depending on the presence of the Emacs directive), it is possible to give arguments to the emulator, such as
%%! -smp enable -sname factorial -mnesia debug verbose
Such an argument line must start with %%! and the rest of the line will interpreted as arguments to the emulator.
我们可以看到 这些选项被传递给了 erl
特性2:
-mode(compile).
这个选项是在escript.erl这个模块处理的。默认情况下 escript是被解释执行的,如果你的脚本很复杂,那么效率估计会是瓶颈。这种情况下, 你可以通过这个选项来让escript来先编译你的模块成opcode, 在vm里面运行。
特性3:
-d 选项 用来调试script的
-c 编译执行
-i 解释执行
-s 只检查不执行
root@nd-desktop:~# escript -d ./factorial 10
我们就可以看到 调试界面如下图
特性4:
可以把一个beam文件作为script
root@nd-desktop:/usr/src# cat hello.erl
-module(hello).
-export([start/0,main/1]).
main(_)->
start().
start()->
io:format("hello world~n",[]).
root@nd-desktop:/usr/src# erlc hello.erl
root@nd-desktop:/usr/src# cat >hello
#!/usr/bin/env escript
%% -*- erlang -*-
%%! -smp enable -sname factorial -mnesia debug verbose
CTRL+D
root@nd-desktop:/usr/src# cat hello.beam >>hello
root@nd-desktop:/usr/src# chmod +x hello
root@nd-desktop:/usr/src# ./hello
hello world
特性5:
可以把一个zip文件作为script
root@nd-desktop:/usr/src# cat hello.erl
-module(hello).
-export([start/0,main/1]).
main(_)->
start().
start()->
io:format("hello world, fac(10)=~w ~n",[fac:fac(10)]).
root@nd-desktop:/usr/src# cat fac.erl
-module(fac).
-export([fac/1]).
fac(0) ->
1;
fac(N) -> N * fac(N-1).
root@nd-desktop:/usr/src# erlc *.erl
root@nd-desktop:/usr/src# erl
Erlang R13B03 (erts-5.7.4) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.4 (abort with ^G)
1> zip:zip("hello.zip", ["hello.beam", "fac.beam"]).
{ok,"hello.zip"}
2>
root@nd-desktop:/usr/src# cat >hello
#!/usr/bin/env escript
%% -*- erlang -*-
%%! -smp enable -sname factorial -mnesia debug verbose -escript main hello
CTRL+D
root@nd-desktop:/usr/src# cat hello.zip >>hello
root@nd-desktop:/usr/src# chmod +x hello
root@nd-desktop:/usr/src# ./hello
hello world, fac(10)=3628800
特性6:
在独立的包里面 把escript伪装成我们的应用程序
root@nd-desktop:/usr/src# cat >hello.escript
-module(hello).
-export([start/0,main/1]).
main(_)->
start().
start()->
io:format("hello world~n",[]).
CTRL+D
root@nd-desktop:/usr/src# cp `which escript` hello
root@nd-desktop:/usr/src# ./hello
hello world
规则是 escript 改名成xxxx 执行xxxx的时候 实际上要读取的脚本是 xxxx.escript
综述: escript是很强大的 未来的erlang standalone全靠它。
- 大小: 68.6 KB
分享到:
- 2009-11-25 05:42
- 浏览 5938
- 评论(5)
- 论坛回复 / 浏览 (2 / 2101)
- 查看更多
相关推荐
eScript语言具有面向对象的特性,支持变量、函数、类、继承等高级编程概念。它与Java有着紧密的联系,可以调用Java类和方法,使得在Siebel环境中可以充分利用Java的强大功能。此外,eScript语言还支持事件驱动编程,...
#### 二、Siebel eScript的技术特性 - **专有性**:Siebel eScript及其文档包含专有信息,其使用和披露受许可证协议限制,并受到版权、专利和其他知识产权法的保护。 - **逆向工程限制**:除为获得与其他独立创建...
oracel support官方提供的siebel escript最佳实践以及其他人总结的siebel escript最佳实践.(资料是英文的)
Siebel eScript是一种在Siebel CRM系统中用于增强和自定义业务逻辑的脚本语言。在实际应用中,优化eScript对于提升系统性能至关重要。以下是一些关键的优化策略: 1. **优先考虑非脚本解决方案**:在编写eScript...
《深入理解escript-开源:探索嵌入式脚本与txt文件操作》 在IT行业中,开源软件一直是推动技术创新的重要力量。"escript-开源"项目正是这样一款以开源为理念,提供强大功能的工具。它允许用户在注释中嵌入脚本,...
erlang-script.rpm 安装mq前的依赖 来源:https://packagecloud.io/rabbitmq/erlang/install#bash-rpm
EMQ X Broker作为MQTT服务器,提供了以下关键功能和特性: 1. **高可用性**:支持集群模式,可以横向扩展以处理大规模并发连接和消息传递,保证服务的稳定性和可靠性。 2. **高性能**:利用Erlang OTP平台的并发和...
六角escript格式的Hex.pm集成。联系我们如果在使用此库时发现任何错误或有问题,请在此存储库中(或拉取请求:))。 您可以在检查我们所有的开源项目。建造打造hexer只是运行make escript 。 这将编译项目并在bin/...
windows脚本技术script
根据提供的文件信息,我们可以归纳出一系列与Siebel系统相关...此外,手册中还包含了一些高级功能的介绍,可供有一定基础的用户进一步探索。总之,无论是Siebel的新手还是有一定经验的用户,都能从这本手册中获益良多。
在JavaScript中,数组是一种非常灵活的数据结构,提供了许多方法来操作数组元素。以下是对这些数组方法的详细汇总。 1. join()方法 join()方法用于将数组中的所有元素连接成一个字符串。如果不指定分隔符,默认使用...
一维的doa角度估计escript程序,利用的是LS-ESCRIPT算法
ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
当尝试运行`escript.ext`时,系统提示该文件“停止工作”,这通常意味着出现了崩溃或未预期的错误。这可能是由于缺少必要的依赖、文件损坏、不兼容性问题或者权限设置不当等原因导致的。 “mqtt”标签表明了这个...
EMQ X 是一款高度可扩展、高性能的 MQTT 消息代理,它是一个开源的 MQTT 服务器,专为物联网(IoT)设计。标题中的 "emqx-4.2.5.zip" 指的是 EMQ X 的特定版本,4.2.5,这个版本已经打包成 ZIP 压缩文件供用户下载和...
1. **高性能**:利用Erlang OTP的并发特性,EMQX可以处理大量并发连接,并且具备高吞吐量和低延迟。 2. **丰富的插件体系**:EMQX支持多种插件机制,用户可以通过插件扩展其功能,如认证、授权、日志记录、数据桥接...
EMQ X 是一款开源的 MQTT 消息中间件,它被广泛应用于物联网、移动应用、实时大数据传输等场景。在 Windows Server 2012 R2 上安装 EMQ X 时,可能会遇到一些问题,例如在执行 `script.zip` 中的 `script.exe` 文件...
Erlang以其高可靠性、容错性和热升级能力而著名,这些特性使得它成为构建像RabbitMQ这样需要处理大量并发连接和高可用性的系统的理想选择。 在安装过程中,首先需要下载 otp_win64_21.1.exe 文件,这是Erlang的...
**PyVisi 开源项目详解** PyVisi 是一个强大的 Python 库,专注于提供一个通用的可视化界面,以便用户能够方便地与各种科学可视...开源的特性使得 PyVisi 不断发展和完善,为用户提供了一个更便捷、高效的可视化平台。
Siebel中文培训文档。 0 Step By Step-客户端安装和配置.pdf 1 Step By Step-Table.pdf 2 Step By Step-Business Compoent & Join.pdf 3 Step By Step-Pick List.pdf ...10 Step By Step-eScript.pdf