实现了一个shell脚本,自动提交代码更新。配合jenkins使用。
完整代码
git add .
is_change=0
temFile="temFile"
git status > $temFile
while read aline
do
echo $aline
if [ "$aline" = "Changes to be committed:" ]
# if [ "$aline" = "Untracked files:" ]
then
is_change=1
fi
done < $temFile
if [ $is_change -eq 1 ]
then
git commit -m "自动更新"
git push
fi
前提条件
- shell执行用户有文件夹权限
- 不需要显式认证(git上配置了ssh或者保存了用户名密码)
原理
执行git status,获取当前状态
遍历状态字符串,是否包含"Changes to be committed:"等字符串
如果包含上述字符串则进行commit和push
关键代码就是循环比对,遇到while循环变量作用域问题
git status | while read aline
do
echo $aline
if [ "$aline" = "Changes to be committed:" ]
# if [ "$aline" = "Untracked files:" ]
then
is_change=1
fi
done
上面虽然执行了is_change=1,但没有执行commit和push。问题出在while上。
while循环读取文件中内容有两种写法,一种是管道符,一种是重定向。
重定向是内建命令,而管道符是非内建命令,linux执行shell时,会创建“子shell”运行shell中的命令,当运行到非内建指令时,会创建“孙shell”运行非内建指令
变量的作用于在每个shell中有效,所以,非内建指令中定义的这些变量就只能在孙shell运行,而在子shell中不生效。
网友评论