mail core2编译脚本执行失败的问题

今天编译mail core2的时候发现curl一直下不回文件,导致编译失败,错误如下:

应该是curl下载失败了。

自己手动执行了一下curl命令,或许是我的curl版本有问题,下回来的文件大小为0。

用curl -I 拿回来的头Content-Length并没有什么问题,状态码也是200。

或许是网络问题,或许是curl的bug,curl版本 7.43.0。

既然没查出原因,就先绕条路,把curl下载改为wget(mac需要额外安装,使用brew就可以),把mailcore2项目scripts/include.sh目录下的build-dep.sh(约325行):

替换为

再编译,就通过了。

至于curl无法通过的原因,待查。

Shell编程中的几个命令

介绍几个命令:echo, eval, exec, export, readonly, read, shift, wait和点(.)。

1.echo

格式:echo args

功能:在屏幕上显示出由args指定的字串。

2.eval

格式:eval args

功能:命令eval的功能是將参数(args)读入 C shell 中,然后在加以执行。例如:

vcom 是 'ls -l ; date'。当我们來执行“$vocm”,会出现错误信息ls: invalid option -- ;”及“try 'ls --help' for more infomation”。原因是 C shell 在语法解析中无法理解特殊符号所造成的。符号“;”和命令 date 被理解成是命令 ls -l 后的“文件名称”。所以才会有“ls: invalid option -- ;”。命令eval 便是用來解决这种情況:

其实在作法上使用命令 eval 便相当于以下的用法:

如果你是在 C shell 下,你也可使用以下的方式:

另外在使用命令 eval 上也有技巧,看一互換的技巧:

3.exec

格式:exec命令参数

功能:当Shell执行到exec语句时,不会去创建新的子进程,而是转去执行指定的命令,当指定的命令执行完时,该进程(也就是最初的Shell)就终止了,所以Shell程序中exec后面的语句将不再被执行。

继续阅读

awk将多个值赋给shell变量

平时我们使用awk的时候,很多变量赋值是直接使用类似下面的方法:

或者很多时候我们有很多值,但是只是为了整理出一个csv或者其他什么文件给我们看而已。

但是如果我们需要拿到awk返回的值并进行进步一shell处理的时候(比如拿回地址进行下载并保存)就麻烦一些了,当然你可以在awk中使用shell脚本,双引号和system函数都支持这样调用,但如果你不怎么喜欢混写的话,可以这样赋值:

这样便拿到你想要的值了。

安装command line tools for xcode

升级了XCode5之后发现command line tools的安装选项消失了,出现在了

Xcode -> Preferences... ->  Locations

选项中。最后一项的 command line tools显示了在本地的安装情况,貌似还可以自行切换版本。所以如果你的恰好是xcode5+,那么恭喜你,你应该不需要安装这玩意儿了。打开终端看看gcc是不是最新版吧。

如果还是没有gcc之类的工具的话,那么可以看看下面删除线划掉的旧部分。如果你的版本是xcode4.6左右,那么可以看末尾的部分。

也许是安装xcode会自动给安装command line tools了,我查看了一下自己的gcc版本,发现是5.0,如果真是这样,请读者自己考虑是否继续安装),可以打开终端后输入如下命令:

sudo xcode-select --install

输入密码后会弹出提示(xcode-select: note: install requested for command line developer tools),然后安装命令行工具(install command line developer tools)。

如果您的版本是XCode 4.6,方法如下:

其实这个很好找,但是网上很多误导人的文章,很让人不爽。

打开xcode以后,点击菜单栏的:

Xcode -> Preferences... ->  Downloads

这时候你应该就可以看到Command Line tools了,在Components选项卡里。其实ios模拟器也是这里安装的,大家应该可以看到。

补充:xcode第一次安装完需要启动一次,同意xcode的协议,不然command line tools是无法使用的,如果你自己跑一下cc或者gcc会发现报下面的提示:

Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.

打开xcode同意协议就可以啦。

一些crontab要注意的地方

crontab是很常用的软件,这里说一些要注意的地方。

如果你的定时脚本执行需要utf-8环境,那么不要忘记加

export LANG=en_US.UTF-8

所以你的任务可能像下面一样

* * * * 1 export LANG=en_US.UTF-8 && /bin/sh do-something.sh

或者其他UTF-8编码的都可以,这样才才不至于执行的时候cron认为你的环境用ascii或其他编码。

如果你的是一个gui程序,那这个程序到时间应该不会显示,具体原因可以搜索shell的机制、cron的机制、DSIPALY和xpath等。可以增加下面一段话来解决此问题:

export DISPLAY=:0

类似于

* * * * 1 export DISPLAY=:0 && /bin/sh do-something.sh

如果还不行,那么请查看xpath,或者通过xterm来转发一下吧。

linux shell 字符串操作(长度,查找,替换)详解

转自 沉于思考,默默学习!

在做shell批处理程序时候,经常会涉及到字符串相关操作。有很多命令语句,如:awk,sed都可以做字符串各种操作。 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快。

继续阅读

Linux shell脚本编写基础

在进行linux测试时编写脚本是必不可少的,Shell脚本的名称可以随便定义,也不要什么后缀名,例如可以写abc,smartzip这类名称,运行时只要键入

./smartzip就能运行脚本了。。

每行命令开头处不用就空格也行。。

第1部分. Linux 脚本编写基础

1.1 语法基本介绍

1.1.1 开头

程序必须以下面的行开始(必须方在文件的第一行):

#!/bin/sh

符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。

当编辑好脚本时,如果要执行该脚本,还必须使其可执行。

要使脚本可执行:

编译 chmod +x filename 这样才能用./filename 来运行
继续阅读