mac port 改造
mac用着确实挺爽,但是对于用惯了linux的我来说,少了gnome-terminal,没了pacman、axel、wget之类常用的软件就就觉得很难受了,尤其是没有包管理软件,实在太痛苦了,于是装上macports,一个类似于linux下包管理的工具,有了它咱又能省力高效地安装软件咯~可是这个ports缺点也不少,不能看下载进度,总不能开个终端到dist文件夹ls-lh吧,还有不知道它用的是啥下载软件,速度实在慢的可以,受够了它的龟速,开始改源码吧~
开源就是这点儿好,软件哪儿用着不爽直接写个补丁就好了。先到/opt/local/share/macports,grepAttempting\to\fetch-r./*发现在Tcl/port1.0文件夹下有个portfetch.tcl的脚本,vim打开之~~
[catch{evalcurlfetch--effective-urleffectiveURL$fetch_options{$file_url}{"${distpath}/${distfile}.TMP"}}result]
发现在Attemptingtofetch下面一行的下载代码,是用crul去下载的。不知道高手们怎么看,我个人的感觉是这个东西很笨重而复杂,很容易出错,可能是我功力不到家,不过不管怎么说,靠这个东西来下载也太不靠谱了~怎么改成wget或者axel呢?Google告诉我们Tcl执行外部程序要么用system,要么用exec。OK,试试system先。
[catch{system"/opt/local/bin/axel-n20-o${distpath}/${distfile}.TMP$file_url"}result]
sudoportinstallxxx然后到dist文件夹(/opt/local/var/macports/distfiles/xxx)看看,发现已经可以用了。还欠缺点儿东西,输出怎们弄呢?怎么在当前终端显示下载速度和进度呢?重定向就可以啦~用>将输出重定向到当前终端。用tty得到当前终端的设备id,然后将源码改为
setcurrentTTy[exec"tty"]
[catch{system"/opt/local/bin/axel-n20-o${distpath}/${distfile}.TMP$file_url>$currentTTy"}result]
一切OK
下一步想修改下下载的源,虽然用了axel,开20线程才30k+的速度,也太不给力了。。。