2020-04-06
Bash 使用了一個名爲 Readline 的庫(共用的例程集合,可以被不同的程式使用),來實現命令列編輯。
Readline 的文件使用術語 killing 和 yanking 來指我們平常所說的剪下和貼上。剪下下來的文字被儲存在一個叫做剪下環 (kill-ring) 的緩衝區中。
元鍵
如果你冒險進入到 Readline 的文件中,你會在 bash 手冊頁的READLINE 段落,遇到一個術語 「元鍵」(meta key)。在當今的鍵盤上,這個元鍵是指 Alt 鍵,但並不總是這樣。
自動補全也能對變數(如果字的開頭是一個 「$」)、使用者名稱字(單詞以」∼」 開始)、命令(如果單詞是一行的第一個單詞)和主機名(如果單詞的開頭是 「@」)起作用。主機名自動補全只對包含在檔案/etc/hosts 中的主機名有效。
bash 維護着一個已經執行過的命令的歷史列表。這個命令列表
被儲存在你家目錄下,一個叫做.bash_history 的檔案裡。
在任何時候,我們都可以瀏覽歷史列表的內容,通過:
[root@VM_0_7_centos ~]# history | less
在預設情況下,bash 會儲存你所輸入的最後 500 個命令。
比方說我們想在自己曾經用過的命令中,找出和/usr/bin 這一目錄相關的。那麼我們就可以這樣做:
[root@VM_0_7_centos ~]# history | grep /usr/bin
比方說在我們的搜尋結果之中,我們得到一行,包含了有趣的命令,像這樣:
88 ls -l /usr/bin > ls-output.txt
數位 「88」 是這個命令在歷史列表中的行號。我們可以使用另一種叫做歷史命令展開的方式,來呼叫「88」所代表的這一行命令:
[root@VM_0_7_centos ~]# !88
bash 會把 「!88」 展開成爲歷史列表中 88 行的內容。
bash 也具有增量搜尋歷史列表的能力。意思是在字元輸入的同時,bash 會去搜尋歷史列表(直接出結果,並高亮匹配的第一個字),每多輸入一個字元都會使搜尋結果更接近目標。輸入 Ctrl-r
來啓動增量搜尋,接着輸入你要尋找的字。當你找到它以後,你可以敲入Enter
來執行命令,或者輸入 Ctrl-j
,從歷史列表中複製這一行到當前命令列。再次輸入 Ctrl-r
,來找到下一個匹配項(歷史列表中向上移動)。輸入 Ctrl-g
或者 Ctrl-c
,退出搜尋。
通過使用 「!」 字元,shell 爲歷史列表中的命令,提供了一個特殊的展開型別。我們已經知道一個感嘆號,其後再加上一個數位,可以把來自歷史列表中的命令插入到命令列中。這裏還有一些其它的展開特性:
應該小心謹慎地使用 「!string」 和 「!?string」 格式,除非你完全確信歷史列表條目的內容。