`
mryufeng
  • 浏览: 982682 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

escript的高级特性

阅读更多
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
分享到:
评论
5 楼 simsunny22 2013-07-12  
这个是在linux下运行的吧,在window下怎么运行escript脚本的呢
4 楼 mryufeng 2010-01-14  
就是和正常的shell或者perl脚本 一样强大呀
3 楼 rain2005 2010-01-14  
瞎猜的啊,这个脚本和mochiweb 的脚本很类似哦,对老大写的debug部分不是很熟,这个东西跟shell一样很方便的,有时可以替代unix shell哦。
2 楼 mryufeng 2009-11-27  
这个escript在erlang的地位就是定位为windows的exe执行文件哦
1 楼 arksea 2009-11-26  
这样都行 。。。收藏了!!!

相关推荐

    eScript Language Reference

    eScript语言具有面向对象的特性,支持变量、函数、类、继承等高级编程概念。它与Java有着紧密的联系,可以调用Java类和方法,使得在Siebel环境中可以充分利用Java的强大功能。此外,eScript语言还支持事件驱动编程,...

    Siebel eScriptt

    #### 二、Siebel eScript的技术特性 - **专有性**:Siebel eScript及其文档包含专有信息,其使用和披露受许可证协议限制,并受到版权、专利和其他知识产权法的保护。 - **逆向工程限制**:除为获得与其他独立创建...

    siebel escript best practices

    oracel support官方提供的siebel escript最佳实践以及其他人总结的siebel escript最佳实践.(资料是英文的)

    Siebel eScript 如何优化

    Siebel eScript是一种在Siebel CRM系统中用于增强和自定义业务逻辑的脚本语言。在实际应用中,优化eScript对于提升系统性能至关重要。以下是一些关键的优化策略: 1. **优先考虑非脚本解决方案**:在编写eScript...

    escript-开源

    《深入理解escript-开源:探索嵌入式脚本与txt文件操作》 在IT行业中,开源软件一直是推动技术创新的重要力量。"escript-开源"项目正是这样一款以开源为理念,提供强大功能的工具。它允许用户在注释中嵌入脚本,...

    erlang-script.rpm.sh

    erlang-script.rpm 安装mq前的依赖 来源:https://packagecloud.io/rabbitmq/erlang/install#bash-rpm

    emqx-windows-exception.zip mqtt

    EMQ X Broker作为MQTT服务器,提供了以下关键功能和特性: 1. **高可用性**:支持集群模式,可以横向扩展以处理大规模并发连接和消息传递,保证服务的稳定性和可靠性。 2. **高性能**:利用Erlang OTP平台的并发和...

    hexer:escript格式的Hex.pm集成

    六角escript格式的Hex.pm集成。联系我们如果在使用此库时发现任何错误或有问题,请在此存储库中(或拉取请求:))。 您可以在检查我们所有的开源项目。建造打造hexer只是运行make escript 。 这将编译项目并在bin/...

    windows脚本技术script

    windows脚本技术script

    siebel手册

    根据提供的文件信息,我们可以归纳出一系列与Siebel系统相关...此外,手册中还包含了一些高级功能的介绍,可供有一定基础的用户进一步探索。总之,无论是Siebel的新手还是有一定经验的用户,都能从这本手册中获益良多。

    超详细的javascript数组方法汇总

    在JavaScript中,数组是一种非常灵活的数据结构,提供了许多方法来操作数组元素。以下是对这些数组方法的详细汇总。 1. join()方法 join()方法用于将数组中的所有元素连接成一个字符串。如果不指定分隔符,默认使用...

    ESPRITII.zip_doa algorithm

    一维的doa角度估计escript程序,利用的是LS-ESCRIPT算法

    ECMAScript6入门优化版.pdf

    ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

    script运行库2020.03.25-X64.zip

    当尝试运行`escript.ext`时,系统提示该文件“停止工作”,这通常意味着出现了崩溃或未预期的错误。这可能是由于缺少必要的依赖、文件损坏、不兼容性问题或者权限设置不当等原因导致的。 “mqtt”标签表明了这个...

    emqx-4.2.5.zip

    EMQ X 是一款高度可扩展、高性能的 MQTT 消息代理,它是一个开源的 MQTT 服务器,专为物联网(IoT)设计。标题中的 "emqx-4.2.5.zip" 指的是 EMQ X 的特定版本,4.2.5,这个版本已经打包成 ZIP 压缩文件供用户下载和...

    emqx-4.4.3-otp24.2.1-windows-amd64.zip

    1. **高性能**:利用Erlang OTP的并发特性,EMQX可以处理大量并发连接,并且具备高吞吐量和低延迟。 2. **丰富的插件体系**:EMQX支持多种插件机制,用户可以通过插件扩展其功能,如认证、授权、日志记录、数据桥接...

    winserver安装emqx报script.zip

    EMQ X 是一款开源的 MQTT 消息中间件,它被广泛应用于物联网、移动应用、实时大数据传输等场景。在 Windows Server 2012 R2 上安装 EMQ X 时,可能会遇到一些问题,例如在执行 `script.zip` 中的 `script.exe` 文件...

    RabbitMQ+erlang安装包

    Erlang以其高可靠性、容错性和热升级能力而著名,这些特性使得它成为构建像RabbitMQ这样需要处理大量并发连接和高可用性的系统的理想选择。 在安装过程中,首先需要下载 otp_win64_21.1.exe 文件,这是Erlang的...

    pyvisi-开源

    **PyVisi 开源项目详解** PyVisi 是一个强大的 Python 库,专注于提供一个通用的可视化界面,以便用户能够方便地与各种科学可视...开源的特性使得 PyVisi 不断发展和完善,为用户提供了一个更便捷、高效的可视化平台。

    Siebel中文培训文档

    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

Global site tag (gtag.js) - Google Analytics