2021-05-21

實(shí)現(xiàn)了一個(gè)shell腳本,自動(dòng)提交代碼更新。配合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 "自動(dòng)更新"
                git push
fi

前提條件

  • shell執(zhí)行用戶有文件夾權(quán)限
  • 不需要顯式認(rèn)證(git上配置了ssh或者保存了用戶名密碼)

原理
執(zhí)行g(shù)it status,獲取當(dāng)前狀態(tài)
遍歷狀態(tài)字符串,是否包含"Changes to be committed:"等字符串
如果包含上述字符串則進(jìn)行commit和push

關(guān)鍵代碼就是循環(huán)比對(duì),遇到while循環(huán)變量作用域問(wè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,但沒(méi)有執(zhí)行commit和push。問(wèn)題出在while上。
while循環(huán)讀取文件中內(nèi)容有兩種寫法,一種是管道符,一種是重定向。
重定向是內(nèi)建命令,而管道符是非內(nèi)建命令,linux執(zhí)行shell時(shí),會(huì)創(chuàng)建“子shell”運(yùn)行shell中的命令,當(dāng)運(yùn)行到非內(nèi)建指令時(shí),會(huì)創(chuàng)建“孫shell”運(yùn)行非內(nèi)建指令
變量的作用于在每個(gè)shell中有效,所以,非內(nèi)建指令中定義的這些變量就只能在孫shell運(yùn)行,而在子shell中不生效。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容