七個超級神奇的 Shell 快捷方式,助您開發(fā)事半功倍
隨著優(yōu)雅、全功能的集成開發(fā)環(huán)境的出現(xiàn),開發(fā)者與命令行的互動越來越少。當您可以通過漂亮的用戶界面安裝包或管理文件時,為什么還需要一堆過時的shell技巧呢?但如果您曾遇到無法通過高級IDE解決的問題,就會明白擁有這些工具的重要性。
在本文中,我們將介紹一些簡單但極其有效的shell快捷方式和命令。使用這些技巧,您可以快速解決錯誤、更快地運行命令,并以最小的努力執(zhí)行搜索。
1、倒序搜索歷史記錄
這是您可以利用shell歷史記錄運行之前執(zhí)行過的命令的最快方法之一。如果您在記得之前運行的命令時感到困難(您并不孤單),簡單地滾動瀏覽您的歷史記錄不會是一種有效的方式。
這就是倒序搜索的用途。使用這個工具,您可以快速搜索您的shell歷史記錄,然后快速執(zhí)行它們。您不必煩惱通過歷史記錄進行g(shù)rep搜索或復制粘貼命令。
假設(shè)我很久以前運行了以下命令:
echo “l(fā)inuxmi.com”
現(xiàn)在已經(jīng)過了一段時間,我無法完全記住我使用的單詞。如果我想使用倒序搜索,我可以按Ctrl + R,然后進入搜索提示符并輸入 linuxmi.com:
(reverse-i-search)`linuxmi.com’: echo “foobar”
當您開始在搜索欄中輸入時,它將自動填充結(jié)果。當您想要的結(jié)果出現(xiàn)時,只需按回車鍵即可運行命令。簡單、快速、簡便。
2、執(zhí)行歷史記錄中的特定命令
這是一種稍微不同的利用shell歷史記錄的方式。當您運行普通的history命令時,您會得到一個您運行過的命令列表。旁邊是ID號碼,它們對應(yīng)每個命令執(zhí)行的順序:
1htop
......
95 top
96 echo "www.linuxmi.com"
97 lynx
98 uname -a
99 neofetch
100 uname -a
101 history
使用這些ID號碼,您可以重新運行歷史記錄中列出的任何命令。您只需在數(shù)字前面加上一個感嘆號(驚嘆號)即可,像這樣:
!99
當您運行此命令時,您將執(zhí)行在ID號碼99處存儲的任何命令。在本文中,它將運行neofetch命令。
這是一種非常方便的方式,可以回顧歷史記錄并執(zhí)行任何您想要重新運行的較長命令。您還可以在shell腳本中聰明地使用它。
3、再次運行上一個命令
這很簡單,但卻非常有用。如果您想重新運行剛剛執(zhí)行的最后一個命令,只需輸入:
!!
看起來按上箭頭然后按回車鍵會更容易,而且在大多數(shù)情況下確實如此。但是,也許您想運行一個新的代碼片段,并在下一個命令中包含上一個命令的輸出。您可以在括號中調(diào)用!!并嵌套命令來執(zhí)行其他有趣的技巧:
linuxmi@linuxmi:~/www.linuxmi.com$ echo "linuxmi.com"
linuxmi@linuxmi:~/www.linuxmi.com$ echo -e "上一個命令是 $(!!)"
使用這種方法,您可以確保絕對引用最后執(zhí)行的命令。不再需要重新輸入或復制粘貼。
4、移動到長命令的開頭或結(jié)尾
當您需要編寫一個非常復雜的單行命令時,如果需要在開頭或結(jié)尾進行編輯,那將是一種痛苦。幸運的是,還有一種快速的方法可以做到這一點。
如果您想要移動到命令的開頭,您可以按下:
Ctrl + a
如果您想要移動到結(jié)尾,您可以按下:
Ctrl + e
這兩個快捷鍵將使您不再需要按住箭頭鍵來來回在一行內(nèi)移動。
5、從光標位置刪除字符
如果您仍在處理那個長的單行命令,刪除其中的一小部分可能會很麻煩。特別是如果您需要刪除線條中某個特定點之前或之后的所有內(nèi)容。
對于這個確切的問題,也有一個 shell 快捷鍵。
如果您想要刪除光標當前位置之前的所有內(nèi)容,可以按下:
Ctrl + u
同樣地,如果您想要刪除光標后的所有內(nèi)容,可以按下:
Ctrl + k
現(xiàn)在,您不必長時間按住退格鍵來修改一個冗長的命令。
6、檢查命令
有時候,一個命令并不總是看起來那么簡單。您在控制臺中輸入的命令在背后可能會被多種不同的進程或配置所操控。
舉個例子,您可以為常用命令添加別名,以便在它們后面附加您喜歡的參數(shù)。比如,您可以像這樣為 ls 添加額外的參數(shù):
alias ls='ls -lah'
在這種情況下,當您輸入 ls 并執(zhí)行它時,您可能認為您只是運行了 ls,但實際上您運行的是帶有隱藏參數(shù)的 ls。
如果您對某個特定命令感到懷疑,可以使用命令行工具 command 快速檢查它:
command -V ls
ls is aliased to 'ls -lah'
當您使用 -V 參數(shù)運行 command 命令時,您可以看到實際執(zhí)行的內(nèi)容。在這個例子中,command 告訴我們實際上運行的是 ls -lah 而不僅僅是 ls。
7、在無限循環(huán)中運行一些命令
最后是一個經(jīng)典的單行命令。這個代碼片段允許您在一組命令之間以一個簡短的延遲進行循環(huán)運行。如果您需要不斷監(jiān)視一個進程或在某些事件發(fā)生時發(fā)送一些警報,這將非常有幫助。
讓我們使用一個簡單的例子,它將運行一個循環(huán),打印當前日期,然后休眠一秒鐘:
linuxmi@linuxmi:~/www.linuxmi.com$ while true; do echo "$(date)"; sleep 1; done
這行代碼由分號分隔,表示要執(zhí)行多個命令或函數(shù):
- 第一個命令是 while true,它將啟動我們的無限循環(huán)。
- 接下來的命令是 do echo “$(date)”,它告訴 shell 在循環(huán)內(nèi)運行此命令并將日期打印到控制臺。
- 最后,我們休眠一秒鐘,然后使用 done 結(jié)束循環(huán)。 由于循環(huán)以 true 作為條件開始,它將一直持續(xù)下去,直到您退出循環(huán)或按下 Ctrl + c。
在這個循環(huán)中,您可以將 echo 命令替換為任何您想要持續(xù)運行的命令。這可以是監(jiān)聽文件、檢查文件是否存在,甚至進行一些簡單的算術(shù)計算。最好的部分是您甚至不需要離開 shell 來執(zhí)行任何操作。