Featured image of post Shell Script: 理解 && 和 ; 的使用及差異

Shell Script: 理解 && 和 ; 的使用及差異

探討 Shell 指令中 && 和 ; 的使用及差異,與實現自動響應的 script。

引言

每次我們完成一篇新的文章,通常會使用 Hugo 來生成網頁,然後透過以下的指令將其上傳到 Github:

1
2
3
4
hugo
git add .
git commit -m "新增一篇貼文"
git push origin master

在這種情況下,突然冒出一個想法!是否有一種方法可以將所有的這些指令一次全部輸入? 經過一番研究,不出所料,答案是!所以也有了今天這篇文😂

&& 和 ; 的差異

在 Shell 中,&&; 兩個符號都可以用來將多個指令串連起來。例如,我們可以利用它們創建一篇新的 Hugo 文章,然後將其自動添加到 Git,並提交和推送到 Github:

1
hugo new post/new-article.md && git add . && git commit -m "新增一篇貼文" && git push origin master

或者:

1
hugo new post/new-article.md ; git add . ; git commit -m "新增一篇貼文" ; git push origin master

兩種方法都會先創建一篇新的 Hugo 文章,接著將所有變更添加到 Git,提交這些變更,然後推送到遠程存儲庫。

不過 &&; 在功能上其實有所差異。當我們使用 && 連接兩個指令時,只有當第一個指令執行成功後,第二個指令才會被執行。若第一個指令執行失敗,則第二個指令將不會執行。

然而,使用 ; 連接兩個指令時,不論第一個指令是否執行成功,第二個指令都將會被執行。

因此,若你與我有同樣的需求,也就是當前一個指令失敗時,你不希望讓變更被推送到 Github,那麼此時我們應選擇使用 &&

1
hugo && git add . && git commit -m "新增了一篇文章" && git push origin master

自動響應

有時我們可能需要自動回答指令中的某些提示,這時我們可以利用 echo 和管道符號 | 來實現。例如,下列的指令將自動回答 “yes”

1
echo "yes" | command-needing-confirmation

這裡,echo 會輸出 “yes”,然後透過管道符號 | 將這個輸出作為下一個命令的輸入。這樣當下一個命令需要確認時,它會自動接收到 “yes” 作為回答。

若有任何問題或者想法,歡迎留言討論。

comments powered by Disqus
使用 Hugo 建立
主題 StackJimmy 設計