erlang 导入库脚本
来源:互联网 发布:湖人12年纳什数据 编辑:程序博客网 时间:2024/06/06 04:37
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脚本
- leetcode_c++:Best Time to Buy and Sell Stock III(123)
- Jenkins+Maven+SVN快速搭建持续集成环境
- 英文文字游戏
- 9. Palindrome Number
- redis在windows64位操作系统的安装与使用
- erlang 导入库脚本
- u-boot与linux内核间的参数传递过程分析
- Android数据库新王者-Realm入门教程
- CSS3属性transform(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
- Wireshark使用教程
- Java内存模型
- ListView嵌套GridView时遇到的一些坑
- Maximum Depth of Binary Tree
- csdn待改进点之5------>在PC上能顶自己博文, 但在手机app上却不能, 这种体验真的好吗?