最近在完善Jenkins上的自动构建系统时,一边探索一边学习到了一些shell脚本的内容,记录如下,操作系统是OSX。
执行子脚本
在一个脚本中调用另一个脚本,有几种方式,各自有各自的应用场景,以下分别介绍。
source
调用一个子脚本,执行完子脚本之后返回继续执行主脚本,同时将子脚本中的变量带回主脚本。
实际上这对于多渠道打包非常适用。先在主脚本中定义一些打包构建参数,全部是默认值,并将一些渠道用到的非默认值放进对应的脚本中,执行渠道脚本后会覆盖掉主脚本中的默认值。以下是一个示例:
主脚本build.sh
,子脚本位于文件夹flavors
中名为Android_QK.sh
。
1 | 默认配置 |
exec
执行一个子脚本,同时主脚本不再继续执行。
与前边的source
完全不同,开始执行子脚本的时候,就意味着原来的主脚本结束了。
.
执行一个子脚本,待子脚本执行结束后,继续执行主脚本。
用于在主脚本中调用一系列的脚本,将各个阶段的代码拆分到不同的文件中,从而对于不同的构建类型可以更灵活地选择调用,例如更新资源可以这样:
1 | ... |
打包时:
1 | ... |
异步执行
在执行的命令后边跟一个&
,即可异步执行。在主脚本后边加一句wait
,会使所有异步执行的子脚本完全结束之后再返回继续执行主脚本。
在构建资源时,常常需要同时构建iOS和Android两个平台的,会出现类似这样的脚本内容:
1 | ... |
可是等一个打完再打另一个实在是太低效了,异步调用子脚本,两个平台一起打包,可以改为这样:
1 | ... |