大多數使用基于 Unix 或類 Unix 操作系統的開發人員都喜歡通過終端向計算機發出指令 。它們通常使用標準 (POSIX) Unix/Linux 命令和其他系統命令來處理文件操作、系統配置和進程控制 。程序員通過遵循各種命令行提示來努力節省時間 , 例如使用終端鍵盤快捷鍵、設置別名和使用命令組合 。在使用終端和 shell 腳本時,將多個 Unix/Linux 命令與邏輯、串聯或管道運算符結合使用是提高工作效率的好方法 。
在這個故事中,我將解釋命令組合技術以及您在日常編程活動和 shell 腳本開發中可以使用的幾種命令組合 。
命令組合技巧大多數時候,我們使用 Bash 作為終端命令解釋器 , 輸入一個命令并按下回車鍵來執行它 。例如,我們經常使用mkdir并按下回車鍵 , 然后我們進入cd更改目錄 。Bash(和其他命令行解釋器,即 Z shell)支持使用各種運算符組合命令,因此我們可以使用它們來合并多個命令并生成一個命令以提高編程效率 。
查看以下命令串聯技術:
- command1 && command2:command1首先執行 。然后,僅在未返回非零退出代碼command2時才執行command1
- command1 || command2:執行command1 。command2然后,僅在command1返回非零退出代碼時執行
- command1 | command2: 通過將command1的標準輸出發送到command2的標準輸入來順序執行這兩個命令
- command1 |& command2:與運算符類似| , 但將標準輸出和錯誤數據發送到command2
- command1 ; command2:無論進程退出代碼如何,都按順序執行兩個命令(與返回鍵相同)
- command1 & command2 &:將兩個命令作為后臺作業執行
瀏覽命令行歷史記錄并重新運行歷史記錄項程序員通常不會頻繁更改或放棄開發環境,因此他們經常不得不重新運行之前輸入的命令 。如果您需要再次運行最近執行的命令怎么辦?您可以先嘗試按向上箭頭鍵并搜索特定命令 。如果您之前輸入過該命令 , 您可能會通過按 Ctrl + R 使用眾所周知的反向搜索功能 。
反向搜索功能快速且高效 , 但有時您需要在執行之前查看所有相關的過去命令 。如果您需要從命令行歷史記錄中搜索、比較和執行命令,則有一種更好的內置反向搜索方法 。history您可以通過組合和命令搜索命令行歷史記錄grep:
history | grep "npm install"上面的命令列出了包含npm install唯一命令編號的所有命令:
文章插圖
現在,您可以使用!<history_index>語法立即執行首選的歷史記錄項 。例如,看下面的例子:
!1575 # Installs typescript立即轉到新創建的目錄在處理軟件項目時,我們經常需要創建新目錄 。例如,如果你做一個重構任務 , 你可能需要創建幾個目錄來存放新重構的源代碼 。我們通常使用mkdir命令來創建一個新目錄 。然后,我們經常使用cd命令去新建的目錄 。我們可以把這兩個動作合二為一,做一個組合命令,如下圖:mkdir app_settings && cd $_上面的命令首先創建app_settings目錄 。接下來 , 它將當前工作目錄更改為app_settings僅當目錄創建成功時 。在 Bash 中,$_參數擴展為上一個命令的最后一個參數,app_settings如上例所示 。您甚至可以將此命令放入 Bash 函數中并定義命令mkdircd!檢測長時間運行的命令狀態我們經常在終端程序中輸入相對較快的命令 。例如,當我們輸入cd更改當前工作目錄時,它會立即完成工作 。在某些情況下,我們還使用長時間運行的命令,這些命令由于網絡操作、文件操作和各種 CPU 密集型處理活動而延遲命令執行 。從包存儲庫安裝大型軟件工具是長時間運行命令的一個很好的例子 。
我們通常在輸入長時間運行的命令后切換到另一個任務 , 而不是查看和等待 。你怎么知道命令完成(或失敗)狀態?
大多數 GNU/Linux 發行版都有預安裝zenity和notify-send版本,因此我們可以使用它們在長時間運行的命令完成時創建通知 。請看以下示例:
npm install; notify-send Doneapt update; notify-send Done您還可以僅在特定命令失敗時顯示通知,如下所示:make || notify-send Error【每個開發人員都應該知道的 Unix/Linux 命令組合,使用他們節省時間】在 macOS 中,可以使用AppleScript創建通知 。sleep 5; notif您可以為此創建一個別名(即)作為 Ubuntu 的alert別名(參見alert中的別名.bashrc) 。運行順序和并行后臺作業我經常使用以下命令在后臺為當前目錄打開我最喜歡的Lite-XL代碼編輯器程序:
lite . &同樣,我們都知道我們可以使用和號 ( &) 將任何命令作為后臺作業執行 。您還可以組合多個命令并&生成多個后臺作業,如下所示:npm install & lite . & 上述命令使用并行命令執行方法生成兩個后臺作業 。如果您只需要為多個命令創建一個后臺作業怎么辦?使用&&運算符,&如下所示:
npm install && lite . &上面的示例命令將在命令完成時打開代碼編輯器npm install,而不會阻止終端交互 。使用帶管道的標準 Unix 命令DevOps工程師和系統管理員經常使用沒有 GUI 的遠程服務器計算機 。同時,一些工程師使用面向 GUI 的 Unix 和類 Unix 系統 。但他們中的大多數人通常更喜歡 CLI 而不是 GUI 。在某些開發場景中,他們必須使用各種輔助命令來轉換或分析其他命令的輸出 。基于 Unix 和類 Unix 的系統帶有內置的傳統標準輔助命令 , 例如wc, head, tail, sort, uniq, awk,sed等 。
我們可以將這些命令與管道運算符一起使用來轉換或分析命令輸出 。例如,您可以使用以下命令組合對列表進行排序和重復數據刪除:
cat list.txt | sort -u我們可以組合head并tail提取線段,如下所示:cat list.txt | sort -u | tail -5 | head -3上面的命令輸出從 2 到 4 的排序行 。或者(作為性能優先的選項),您sed也可以使用:cat list.txt | sort -u | sed -n "2,4p"
- 沒有可以編寫代碼的操作系統,微軟是如何開發操作系統的?
- 事業編制人員的績效有哪幾種?如何發放?比公務員如何?
- 勞務派遣人員工資高嗎?保障好嗎
- 本次央行機構改革,受益最大的是縣級支行工作人員嗎?
- 一個函數就搞定 WordPress 后臺文章列表自定義欄目開發
- 為什么社區工作人員屬于公職人員
- 國有企業管理人員包括哪些人員
- 往事不再提起下一句 ?每個人都有不愿提起的往事
- ?趙今麥插隊風波升級!工作人員放錘反駁,官方解釋被嘲諷
- 為什么中國不能開發出自己的瀏覽器?
