實現(xiàn)了一個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執(zhí)行用戶有文件夾權限
- 不需要顯式認證(git上配置了ssh或者保存了用戶名密碼)
原理
執(zhí)行git status输莺,獲取當前狀態(tài)
遍歷狀態(tài)字符串答憔,是否包含"Changes to be committed:"等字符串
如果包含上述字符串則進行commit和push
關鍵代碼就是循環(huán)比對,遇到while循環(huán)變量作用域問題
git status | while read aline
do
echo $aline
if [ "$aline" = "Changes to be committed:" ]
# if [ "$aline" = "Untracked files:" ]
then
is_change=1
fi
done
上面雖然執(zhí)行了is_change=1彬伦,但沒有執(zhí)行commit和push滔悉。問題出在while上伊诵。
while循環(huán)讀取文件中內(nèi)容有兩種寫法,一種是管道符回官,一種是重定向曹宴。
重定向是內(nèi)建命令,而管道符是非內(nèi)建命令歉提,linux執(zhí)行shell時笛坦,會創(chuàng)建“子shell”運行shell中的命令,當運行到非內(nèi)建指令時苔巨,會創(chuàng)建“孫shell”運行非內(nèi)建指令
變量的作用于在每個shell中有效版扩,所以,非內(nèi)建指令中定義的這些變量就只能在孫shell運行侄泽,而在子shell中不生效礁芦。