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