shell執(zhí)行g(shù)it命令
發(fā)布代碼的git命令
發(fā)布博客代碼到vps上,按順序執(zhí)行下面的git命令:
git pull origin test
git push origin master
在已經(jīng)記住了這兩個(gè)git命令的情況下踏施,沒(méi)有必要每次發(fā)布
都敲這么多代碼应又。我需要一個(gè)shell腳本宙项,一次性執(zhí)行多條
命令。
刪除緩存的linux命令
由于我把每篇文章數(shù)據(jù)都存儲(chǔ)到了文件緩存中株扛,每次編輯
舊文章重新發(fā)布后尤筐,并不能看到最新數(shù)據(jù),需要到服務(wù)器
上手工清理緩存洞就。這也很麻煩盆繁。
刪除緩存的linux命令是:
rm -rvf /usr/local/nginx/html/blog/runtime/cache
編寫(xiě)shell腳本
#! /bin/bash
# 保存當(dāng)前目錄
currentDir=$PWD
echo "Start to publish...\n"
# 切換到項(xiàng)目目錄
cd /usr/local/nginx/html/blog
# 執(zhí)行g(shù)it命令
git pull origin test
git push origin master
# 切換回原來(lái)的目錄
cd $currentDir
# 刪除緩存
rm -rvf /usr/local/nginx/html/blog/runtime/cache
echo "Success\n";
執(zhí)行腳本
假設(shè)寫(xiě)好的腳本文件名為git.sh
,若直接運(yùn)行該腳本旬蟋,會(huì)提示
無(wú)權(quán)限油昂。那就必須讓執(zhí)行腳本的用戶具有執(zhí)行這個(gè)腳本的權(quán)限,
使用命令:
chmod +x ./test.sh #使腳本具有執(zhí)行權(quán)限
以后每次發(fā)布項(xiàng)目的時(shí)候倾贰,直接使用執(zhí)行腳本就可以了冕碟。
./git.sh
制作軟連接
軟連接與硬鏈接概念
軟連接相當(dāng)于windows里的快捷方式,刪除它之后匆浙,原文件依然存在安寺。
一個(gè)文件,有多個(gè)硬鏈接與其對(duì)應(yīng)吞彤。只有將該文件的所有硬鏈接刪除
之后我衬,該文件才會(huì)被刪除叹放。
軟連接與硬鏈接命令
待補(bǔ)充。
遇到的問(wèn)題
error: 無(wú)法打開(kāi) .git/FETCH_HEAD:????
使用cg帳號(hào)執(zhí)行git.sh
的時(shí)候挠羔,出現(xiàn)這個(gè)錯(cuò)誤提示井仰。切換到root
帳號(hào),su root
后破加,可以執(zhí)行這個(gè)腳本了俱恶。
壞的解釋器: 沒(méi)有那個(gè)文件或目錄
錯(cuò)誤現(xiàn)象
執(zhí)行下面的腳本:
#! /bin/bash
# 保存當(dāng)前目錄
currentDir=$PWD
echo "Start to publish...\n"
# 切換到項(xiàng)目目錄
cd /usr/local/nginx/html/blog
# 執(zhí)行g(shù)it命令
git pull origin test
git push origin master
# 切換回原來(lái)的目錄
cd $currentDir
# 刪除緩存
rm -rvf /usr/local/nginx/html/blog/runtime/cache
echo "Success\n";
控制臺(tái)出現(xiàn)錯(cuò)誤信息:
[root@localhost shell]# ./git.sh
bash: ./git.sh: /bin/bash^M: 壞的解釋器: 沒(méi)有那個(gè)文件或目錄
用命令cat -A git.sh
查看git.sh
,內(nèi)容非常奇怪范舀,見(jiàn)下圖:
使用cat -A test.sh
查看test.sh
合是,test.sh
能夠正常運(yùn)行。它的內(nèi)容是:
打開(kāi)Notepad++的“顯示所有字符”開(kāi)關(guān)后锭环,看到了正常腳本與異常腳本的差異:
產(chǎn)生原因
原因很長(zhǎng)聪全,詳情見(jiàn) Linux和windows中的換行符差異問(wèn)題。
我只掌握這些:Unix系統(tǒng)里辅辩,每行結(jié)尾只有“<換行>”难礼,即“\n”;Windows系統(tǒng)
里面玫锋,每行結(jié)尾是“<換行><回車>”蛾茉,即“\n\r”;Mac系統(tǒng)里撩鹿,每行結(jié)尾是“<回車>”谦炬。
一個(gè)直接后果是,Unix/Mac系統(tǒng)下的文件在Windows里打開(kāi)的話节沦,所有文字會(huì)變成
一行键思;而Windows里的文件在Unix/Mac下打開(kāi)的話,在每行的結(jié)尾可能會(huì)多出一個(gè)^M符號(hào)
windows創(chuàng)建的文件是 \n\r結(jié)束的散劫, 而linux稚机,mac這種unix類系統(tǒng)是\n結(jié)束的。
解決辦法
編程工作幾乎全在windows上做获搏,在windows上寫(xiě)出來(lái)的shell腳本因換行問(wèn)題
不能在linux上執(zhí)行,有兩種解決方法:
寫(xiě)好腳本之后失乾,借助linux的sed工具處理腳本常熙。
用PHP寫(xiě)個(gè)文本處理工具,在linux上運(yùn)行腳本之前碱茁,先用PHP工具處理好
shell腳本的換行問(wèn)題裸卫。
先嘗試一些第一種,在linux上執(zhí)行命令
sed -i 's/\r$//'git.sh
-i
表示插入纽竣,'s'表示替代模式墓贿,\r$
表示任何以\r
結(jié)尾的字符茧泪。整句的意思是,
把\r
結(jié)尾的字符替換成空白聋袋。(不理解)
執(zhí)行上述命令队伟,屏幕打印報(bào)錯(cuò)信息:
[root@localhost shell]# sed -i 's/\r$//'git.sh
sed:-e 表達(dá)式 #1,字符 10:“s”的未知選項(xiàng)
使用下面的命令:
sed -i 's/\r$//' git.sh
沒(méi)有任何輸出信息幽勒。再使用cat -A git.sh
查看嗜侮,發(fā)現(xiàn)已經(jīng)正常了。用sz
命令把
git.sh
下載到windows上用notepad++查看啥容,也是正常的锈颗。
正確的sed
代碼與錯(cuò)誤的sed
代碼僅有的差異是:
sed -i 's/\r$//'git.sh
sed -i 's/\r$//' git.sh
git.sh
是否與前面有空格。
還有一個(gè)發(fā)現(xiàn):若一個(gè)文件的換行符是\r
咪惠,那么即使在windows下通過(guò)回車鍵
換行击吱,換行符也是\n
∫C粒可以保留一份以\n
為換行符的shell腳本模板覆醇,每次新建
shell腳本的時(shí)候,都用它渠鸽。
shell腳本切換用戶后停止執(zhí)行
詳情見(jiàn):shell腳本切換用戶后停止執(zhí)行了
其他知識(shí)
批量刪除文件
下面的命令刪除了所有的txt文件叫乌,包括當(dāng)前目錄的下級(jí)目錄!
find . -name "*.txt" -type f | xargs -n 1 rm -f
或
find . -name "*.txt" -type f | xargs -n 1 rm
git查看遠(yuǎn)程倉(cāng)庫(kù)地址
git remote -v