cabal替代脚本

由于网络原因,直接使用cabal update不成功,只能自己写脚本直接从网上拖包下来,自己安装。

但是这样做的缺点是需要手动处理dependency,当然,也可以把脚本写的复杂些,自动来处理dependency。

cabal.sh

1 cat<<EOF > .tmp_sed_script
2 s/<\/[^>]*>/&\n/g
3 s/></>\n</g
4 s/a href="\([^"]*\)"/\n[URL: \1 ]\n/g
5 EOF
6
7 home_url="https://hackage.haskell.org"
8
9 item_url=$home_url/"package/"$1
10
11 target_dir=""
12
13 curl $item_url 1> .tmp_page_content 2> /dev/null
14
15 for link in $(sed -f .tmp_sed_script .tmp_page_content | grep URL | awk ‘{print $2}‘)
16 do
17 if [[ $link == /*.tar.gz ]]
18 then
19 full_link=$home_url$link
20 echo "wget " $full_link " --no-check-certificate ......"
21 wget $full_link --no-check-certificate
22 archive_file=$(basename $full_link)
23 if [ -f $archive_file ]
24 then
25 tar -xvzf $archive_file 2>&1 > /dev/null
26 fi
27 target_dir=$(tar tzf $archive_file | awk ‘NR==1{print}‘)
28 fi
29 done
30
31 rm .tmp_*
32 rm *.tar.gz*
33
34 cd $target_dir
35 sudo cabal configure
36 sudo cabal install
37 cd ..

  



不过好像必须要处理dependency了,这样才能真正自动化。

ghc-pkg list | sed -e ‘/[\/(]/d‘ | awk ‘BEGIN{FS="-"}{print $1}‘ | sed -e ‘/Cabal/d‘ | awk ‘NF!=0{print}‘ | sed ‘s/ //g‘ > .installed_pkgs

  

if [ ! -f .tmp_sed_script ]
then
cat<<EOF > .tmp_sed_script
s/<\/[^>]*>/&\n/g
s/></>\n</g
s/a href="\([^"]*\)"/\n[URL: \1 ]\n/g
EOF
fi

if [ ! -f .tmp_installed_pkgs ]
then
ghc-pkg list | sed -e ‘/[\/(]/d‘ | awk ‘BEGIN{FS="-"}{print $1}‘ | sed -e ‘/Cabal/d‘ | awk ‘NF!=0{print}‘ | sed ‘s/ //g‘ > .tmp_installed_pkgs
fi

home_url="https://hackage.haskell.org"

item_url=$home_url/"package/"$1

target_dir=""

if [ ! -f $.tmp_page_content_"$1" ]
then
curl $item_url 1> .tmp_page_content_"$1" 2> /dev/null
fi

sed -f .tmp_sed_script .tmp_page_content_"$1" | grep "URL: /package/" | sed -e "/$1/d" > .tmp_dependency_"$1"

# we should make sure that all the package in .tmp_dependency_XXX file should be installed first than this package
#
#

for dependency in $(cat .tmp_dependency_"$1")
do
	if [[ $dependency == /package/* ]]
	then
		#echo $dependency
		dep=$(echo $dependency | cut -b 10-)
		b_installed=false
		for installed in $(cat .tmp_installed_pkgs)
		do
			if [[ $installed == $dep ]]
			then
				b_installed=true
			fi
		done
		#echo $b_installed " for " $dep

		if [[ $b_installed == "false" ]]
		then
			echo "$1 depends on $dep"
			echo "$dep" >> .tmp_installed_pkgs
			bash cabal_ex.sh $dep
		fi
	fi
done

  

但是这种以脚本为单位的recursion效率又有点问题,所以最好将其写成一个函数。

cabal替代脚本

时间: 2024-10-09 05:33:48

cabal替代脚本的相关文章

jsp内置对象和el表达式

九个内置对象 *out jsp的输出流,用来向客户端响应 *page 当前jsp页面, 它的引用数据类型是Object,即真身中有如下代码 Object page=this; *config 它对应真身中的ServletConfig对象 *pageContext 一个顶九个,这个重要 *request HttpServletRequest *response HttpServletResponse *exception Throwable *session HttpSession *applic

JSP中使用EL表达式

EL表达式 :EL 全名为Expression Language,就是为了替代<%= %>脚本表达式. EL主要作用: 获取数据: EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象.获取数据.(某个web域 中的对象,访问javabean的属性.访问list集合.访问map集合.访问数组) 执行运算: 利用EL表达式可以在JSP页面中执行一些基本的关系运算.逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算.${user==null} 获取web

js图片无缝滚动代码

想必大家都注意到<marquee>的不循环滚动,所以出现了很多替代脚本,或iframe或JS输出<marquee>,不管怎么做,都略显麻烦.下面说一下这个相对简单的实现思路:一个设定宽度并且隐藏超出它宽度的内容的容器demo,里面放demo1和 demo2,demo1是滚动内容,demo2为demo1的直接克隆,通过不断改变demo1的scrollTop或者scrollLeft达到滚动的目的,当滚动至demo1与demo2的交界处时直接跳回初始位置,因为demo1与demo2一样,

SQL SERVER 2008向ORACLE 11G迁移示例

来源于:http://www.cnblogs.com/hiizsk/ 由SQL SERVER 2008向ORACLE 11G迁移过程记录之一-表 使用Oracle Sql Developer将SQL SERVER 2008数据库移植到Oracle 11g(一) 使用Oracle Sql Developer将SQL SERVER 2008数据库移植到Oracle 11g(二) 使用Oracle Sql Developer将SQL SERVER 2008数据库移植到Oracle 11g(三) 使用O

[应用篇]第一篇 EL表达式入门

概念 EL表达式:EL 全名为Expression Language,就是为了替代<%= %>脚本表达式. 作用 获取数据: EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象.获取数据.(某个web域 中的对象,访问javabean的属性.访问list集合.访问map集合.访问数组) 执行运算: 利用EL表达式可以在JSP页面中执行一些基本的关系运算.逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算.${user==null} 获取web开发常

通过DOS、SHELL批处理命令加载Lib并编译和打包Java项目(或者运行项目)

有些时候,需要通过DOS批处理来编译整个项目的JAVA文件:并且编译后还要对Class文件进行打包成jar文件...这还不是最烦的,最烦的是,编译和打包的时候需要依赖其他多个jar文件,困难就这么来了.... 项目结构App |-dest | |-libs(copy过来的依赖库) | |-bin(生成的class文件) | |-libs(依赖库) |-src(需要编译的JAVA源文件) 如果需要对项目编译,首先,需要清理dest文件夹 REM 删除dest包IF EXIST dest RMDIR

服务器配置初级与进阶

初级篇:(单机模式) 假设配置:(Dual core 2.0GHz,4GB ram,SSD) 基础框架:apache(PHP) + Mysql / IIS + MSSQL (最基础框架,处理一般访问请求) 进阶1:替换Apache为Nginx,并在数据库前加上cache层[数据库的速度是最大的瓶颈] Nginx(PHP) + Memcache + Mysql (此时已经具备处理小型访问量的能力) 进阶2:随着访问量的上涨,最先面临的问题就来了:CGI无法匹配上Nginx的高IO性能,这时候可以通

java新知识系列 三

1:trycatch中需要注意的地方. 2:ServletConfig以及ServletContext对象. 3: Spring事务属性的种类:   传播行为.隔离级别.只读和事务超时. 5:关于程序继承的报错. 6:java数组具有协变性,而java集合不是协变的. 7:  EL表达式:http://www.cnblogs.com/xushuai123/archive/2013/03/24/2979711.html 8:常见类的线程安全属性,以及如何去判断一个类是否是线程安全的方法以及源码实例

MOCTF——Crypto八道WP

MOCTF是一个国产CTF平台,难度中下,很适合我这种小菜鸡刷题,毕竟只要做出来就很有成就感,当然,如果达到大佬水平,做这些题或许就会觉得在浪费自己时间了. 一.数据库密码     D8EA7326QE6EC5916ACCDX6E0VC9D264C63 根据题目描述(在这里不复制粘贴了),得知这串字符与数据库的加密方式有关,查询后得知早期是MD5加密,后期是SHA1加密. 对于这类密码,有一个很稳健的网站CMD5推荐给各位密码学习者,通过网站给的格式,先从最简单的不加盐无嵌套开始考虑,SHA1必