shell執(zhí)行g(shù)it命令
發(fā)布代碼的git命令
發(fā)布博客代碼到vps上,按順序執(zhí)行下面的git命令:
git pull origin test
git push origin master
在已經(jīng)記住了這兩個git命令的情況下,沒有必要每次發(fā)布
都敲這么多代碼。我需要一個shell腳本,一次性執(zhí)行多條
命令。
刪除緩存的linux命令
由于我把每篇文章數(shù)據(jù)都存儲到了文件緩存中,每次編輯
舊文章重新發(fā)布后,并不能看到最新數(shù)據(jù),需要到服務(wù)器
上手工清理緩存。這也很麻煩。
刪除緩存的linux命令是:
rm -rvf /usr/local/nginx/html/blog/runtime/cache
編寫shell腳本
#! /bin/bash
# 保存當(dāng)前目錄
currentDir=$PWD
echo "Start to publish...\n"
# 切換到項目目錄
cd /usr/local/nginx/html/blog
# 執(zhí)行g(shù)it命令
git pull origin test
git push origin master
# 切換回原來的目錄
cd $currentDir
# 刪除緩存
rm -rvf /usr/local/nginx/html/blog/runtime/cache
echo "Success\n";
執(zhí)行腳本
假設(shè)寫好的腳本文件名為git.sh
,若直接運行該腳本,會提示
無權(quán)限。那就必須讓執(zhí)行腳本的用戶具有執(zhí)行這個腳本的權(quán)限,
使用命令:
chmod +x ./test.sh #使腳本具有執(zhí)行權(quán)限
以后每次發(fā)布項目的時候,直接使用執(zhí)行腳本就可以了。
./git.sh
制作軟連接
軟連接與硬鏈接概念
軟連接相當(dāng)于windows里的快捷方式,刪除它之后,原文件依然存在。
一個文件,有多個硬鏈接與其對應(yīng)。只有將該文件的所有硬鏈接刪除
之后,該文件才會被刪除。
軟連接與硬鏈接命令
待補充。
遇到的問題
error: 無法打開 .git/FETCH_HEAD:????
使用cg帳號執(zhí)行git.sh
的時候,出現(xiàn)這個錯誤提示。切換到root
帳號,su root
后,可以執(zhí)行這個腳本了。
壞的解釋器: 沒有那個文件或目錄
錯誤現(xiàn)象
執(zhí)行下面的腳本:
#! /bin/bash
# 保存當(dāng)前目錄
currentDir=$PWD
echo "Start to publish...\n"
# 切換到項目目錄
cd /usr/local/nginx/html/blog
# 執(zhí)行g(shù)it命令
git pull origin test
git push origin master
# 切換回原來的目錄
cd $currentDir
# 刪除緩存
rm -rvf /usr/local/nginx/html/blog/runtime/cache
echo "Success\n";
控制臺出現(xiàn)錯誤信息:
[root@localhost shell]# ./git.sh
bash: ./git.sh: /bin/bash^M: 壞的解釋器: 沒有那個文件或目錄
用命令cat -A git.sh
查看git.sh
,內(nèi)容非常奇怪,見下圖:
使用cat -A test.sh
查看test.sh
,test.sh
能夠正常運行。它的內(nèi)容是:
打開Notepad++的“顯示所有字符”開關(guān)后,看到了正常腳本與異常腳本的差異:
產(chǎn)生原因
原因很長,詳情見 Linux和windows中的換行符差異問題。
我只掌握這些:Unix系統(tǒng)里,每行結(jié)尾只有“<換行>”,即“\n”;Windows系統(tǒng)
里面,每行結(jié)尾是“<換行><回車>”,即“\n\r”;Mac系統(tǒng)里,每行結(jié)尾是“<回車>”。
一個直接后果是,Unix/Mac系統(tǒng)下的文件在Windows里打開的話,所有文字會變成
一行;而Windows里的文件在Unix/Mac下打開的話,在每行的結(jié)尾可能會多出一個^M符號
windows創(chuàng)建的文件是 \n\r結(jié)束的, 而linux,mac這種unix類系統(tǒng)是\n結(jié)束的。
解決辦法
編程工作幾乎全在windows上做,在windows上寫出來的shell腳本因換行問題
不能在linux上執(zhí)行,有兩種解決方法:
寫好腳本之后,借助linux的sed工具處理腳本。
用PHP寫個文本處理工具,在linux上運行腳本之前,先用PHP工具處理好
shell腳本的換行問題。
先嘗試一些第一種,在linux上執(zhí)行命令
sed -i 's/\r$//'git.sh
-i
表示插入,'s'表示替代模式,\r$
表示任何以\r
結(jié)尾的字符。整句的意思是,
把\r
結(jié)尾的字符替換成空白。(不理解)
執(zhí)行上述命令,屏幕打印報錯信息:
[root@localhost shell]# sed -i 's/\r$//'git.sh
sed:-e 表達式 #1,字符 10:“s”的未知選項
使用下面的命令:
sed -i 's/\r$//' git.sh
沒有任何輸出信息。再使用cat -A git.sh
查看,發(fā)現(xiàn)已經(jīng)正常了。用sz
命令把
git.sh
下載到windows上用notepad++查看,也是正常的。
正確的sed
代碼與錯誤的sed
代碼僅有的差異是:
sed -i 's/\r$//'git.sh
sed -i 's/\r$//' git.sh
git.sh
是否與前面有空格。
還有一個發(fā)現(xiàn):若一個文件的換行符是\r
,那么即使在windows下通過回車鍵
換行,換行符也是\n
。可以保留一份以\n
為換行符的shell腳本模板,每次新建
shell腳本的時候,都用它。
shell腳本切換用戶后停止執(zhí)行
其他知識
批量刪除文件
下面的命令刪除了所有的txt文件,包括當(dāng)前目錄的下級目錄!
find . -name "*.txt" -type f | xargs -n 1 rm -f
或
find . -name "*.txt" -type f | xargs -n 1 rm
git查看遠程倉庫地址
git remote -v