随着业务的发展,原本轻量级的APP已经变成了超级APP,业务分支较多,逻辑较复杂,大量的开发人员加入到这个超级APP的开发过程中来,这时候需要划分业务模块、分配开发任务,落地到每个程序员的手头上。
目前使用cocoapods管理项目,原本的打包脚本是像下面这样设计的:
IPA.sh
- 从远端更新本地.cocoapods/repos 目录下组件库
- xcodebuild编译生成IPA包
- 上传IPA到服务器
可以看出IPA.sh这个脚本内部结构相当的复杂,得有几百行的脚本。。。所以我对IPA.sh做了拆分,将上面的三块业务分别使用单独的sh脚本来处理
repo_update.sh
ipa.sh
ipa_upload.sh
那么问题就来了,sh之间如何相互调用呢?看了shell的文档,找到了以下几种方式:
Command | Explanation |
---|---|
fork | 新开一个子Shell执行,子Shell可以从父Shell继承环境变量,但子Shell中的环境变量不会带回给父Shell |
exec | 在同一个Shell内执行,但是父脚本中exec行之后的内容就不会再执行了 |
source | 在同一个Shell中执行,在被调用的脚本中声明的变量和环境变量,都可以在主脚本中进行获取和使用,相当于合并两个脚本在执行 |
repo_update.sh
#!/bin/sh
# repo_update.sh
#
#
# Created by duwen on 2020/4/10.
#
echo "执行中的PID = $$"
echo "进来啦"
ipa.sh调用其他sh方法
#!/bin/sh
# ipa.sh
#
#
# Created by duwen on 2020/4/10.
#
echo "当前的PID = $$"
REPO_UPDATE_SH="$(pwd)/repo_update.sh"
chmod +x ${REPO_UPDATE_SH}
case $1 in
--exec)
echo "当前选择的是exec模式\n"
exec ${REPO_UPDATE_SH} ;;
--source)
echo "当前选择的是source模式\n"
source ${REPO_UPDATE_SH} ;;
*)
echo "当前选择的是默认fork模式\n"
./repo_update.sh ;;
esac
echo "执行之后的PID = $$"
验证
fork
Mac-mini-3:xcode peter$ sh ipa.sh
当前的PID = 8363
当前选择的是默认fork模式
执行中的PID = 8366
进来啦
执行之后的PID = 8363
exec
Mac-mini-3:xcode peter$ sh ipa.sh --exec
当前的PID = 8374
当前选择的是exec模式
执行中的PID = 8374
进来啦
source
Mac-mini-3:xcode peter$ sh ipa.sh --source
当前的PID = 8377
当前选择的是source模式
执行中的PID = 8377
进来啦
执行之后的PID = 8377
至此,实现了sh之间的相互调用
shell脚本持续更新中…
https://github.com/DuWen/Shell