erlang 导入库脚本【转】
来源:互联网 发布:手机本地端口查看 编辑:程序博客网 时间:2024/06/06 00:21
来自:http://blog.csdn.net/yangzm/article/details/51629259
erlang 导入库时要copy 还要写配置文件,现在写了一个脚本来实现这个功能。调用filetest( "/home/yangzm/erl/ej/","/opt/erlang/lib/erlang/lib" ).会把ebin 及依赖的ebin都 copy到目标,并在~/.erlang 中添加路径。代码如下:%///////////////////////-module(b).-author("yangzm").-compile(export_all).format(Format, Args)-> lists:flatten(io_lib:format(Format,Args)).make_dir_list( Dir )-> R = filename:split( Dir ), R1 = tl( R ), Se = lists:seq( 1, length( R )-1 ), lists:foreach( fun( X )-> Rt = lists:sublist( R1, X ), Rd = string:concat( "/", string:join( Rt, "/") ), % 文件夹是否存在 S = filelib:is_dir( Rd ), if S =:= false -> file:make_dir(Rd); true-> ok end end, Se ), ok.copyDir(FromDir,TarDir)-> %%获取当前文件夹的所有文件列表(包括子文件夹) {ok,AllFile} = file:list_dir_all(FromDir), %%创建目标文件夹 %file:make_dir(TarDir), make_dir_list( TarDir ), %%尾递归遍历所有文件 loopCopy(AllFile,FromDir,TarDir).loopCopy(AllFile,FromDir,TarDir) -> case AllFile of [] -> ok; _ -> %%每次拿第一个文件 One [One|Other]=AllFile, Path=FromDir++"/"++One, Tar=TarDir++"/"++One, %%判断当前文件是否是文件夹 IsDir= filelib:is_dir(Path), %%if写法 所有判断的可能写在前面 true写在后面 if IsDir =:= false-> %%如果当前是文件 则拷贝到目标路径 file:copy(Path, Tar); %%if 的默认值 true-> %%如果当前是文件夹 在目标路径创建文件夹 并拷贝当前文件夹 file:make_dir(Tar), copyDir(Path,Tar) end, %%递归第一个文件后面的文件 loopCopy(Other,FromDir,TarDir) end.copyitems(Source, Target, L3, L4)-> Out = L3 ++ L4, lists:foreach( fun(X)-> error_logger:info_msg("~p~n",[X]), IsDir= filelib:is_dir( X ), if IsDir =:= true -> Tail = filename:basename( Source ), Pos = string:rstr( X, Tail ), Pos2 = string:len(X) - Pos + 1, Ri = string:right( X, Pos2 ), copyDir( X, lists:concat([Target,"/", Ri] ) ), % 写入配置文件 {ok,[[Home]]} = init:get_argument(home), Sconfig = string:concat( Home, "/.erlang"), Con = lists:concat([Target,"/", Ri] ), Sr = format( "\ncode:add_pathz(\"~s\").",[Con]), case file:open( Sconfig, [read,binary,raw]) of {ok,S}-> Size = filelib:file_size( Sconfig ), {ok, Read} = file:pread( S, 0, Size ), Sread = format("~s",[Read]), file:close(S), Swrite = string:concat( Sread, Sr ), {ok,W} = file:open(Sconfig,[raw,write,binary]), file:pwrite( W, 0, Swrite ), file:close(W), ok end end end, Out).filetest( Source, Target )-> {ok,Dir} = file:list_dir_all( Source ), Ets = ets:new(abc,[duplicate_bag]), case lists:member( "ebin", Dir ) of true -> St = lists:concat( [Source, "ebin"] ), ets:insert(Ets,{St}) end,case lists:member( "priv", Dir ) of true-> St2 = lists:concat( [Source, "priv"] ), ets:insert(Ets,{St2})end,case lists:member( "deps", Dir ) of true -> St2 = lists:concat( [Source, "deps"] ), {ok,Dir2} = file:list_dir_all( St2 ), L2 = lists:map( fun( X )-> lists:concat( [X, "/ebin"] ) end, Dir2 ), L4 = lists:map( fun( X )-> lists:concat( [St2,"/", X] ) end, L2 ), L3 = lists:map( fun( {X} )-> X end, ets:tab2list( Ets ) ), copyitems(Source,Target,L3,L4), ok; false -> L3 = lists:map( fun( {X} )-> X end, ets:tab2list( Ets ) ), copyitems(Source,Target,L3,[]) end,io:format("fdas").
0 0
- erlang 导入库脚本【转】
- erlang 导入库脚本
- 全库导入脚本
- erlang dialyzer 两个脚本
- Erlang:使用Erlang Json库
- sqoop脚本(导入到pg库)
- 解决eclipse导入erlang项目中文乱码
- erlang window下执行 escript脚本
- mysql导入sql脚本
- 经典导入数据脚本
- mysql脚本导入导出
- MAXIMO数据库导入脚本
- 导入电话本控件脚本
- 批量导入Sql脚本
- Mysql 导入sql脚本
- mysql 脚本导入数据
- mysql导入sql 脚本
- MySQL导入SQL脚本
- linux系统安装jdk
- iOS无线滚动系列,轮播图、滚动消息
- Tensorflow lesson 2---唯一的结构tensor
- position:ablosute和position:relative的简单理解
- ICNet读书笔记
- erlang 导入库脚本【转】
- Java工程师学习路线
- PCL中的KDtree
- 重温矩阵(IV) 矩阵与函数
- Jenkins进阶系列之——03parameterized-trigger插件
- Unity Shader入门精要学习笔记
- Spring注解的(List&Map)特殊注入功能
- SpringMVC 文件上传配置,多文件上传,使用的MultipartFile
- unity中UnityEngine.EventSystems类PointerEventData包含的属性数据