shell執(zhí)行g(shù)it命令

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 

制作軟連接

軟連接與硬鏈接概念

Linux軟連接和硬鏈接

軟連接相當(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)容非常奇怪,見下圖:

shell執(zhí)行g(shù)it命令_壞的解釋器

使用cat -A test.sh查看test.shtest.sh能夠正常運行。它的內(nèi)容是:

shell執(zhí)行g(shù)it命令_正常

打開Notepad++的“顯示所有字符”開關(guān)后,看到了正常腳本與異常腳本的差異:

shell執(zhí)行g(shù)it命令_正常與異常對比

產(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í)行,有兩種解決方法:

  1. 寫好腳本之后,借助linux的sed工具處理腳本。

  2. 用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í)行

詳情見: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

我的博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容