搜尋 shell 歷史記錄的最佳方式

搜尋 shell 歷史記錄的最佳方式

有沒有比 grep 更好的方法來搜尋我的歷史檔案中的指令?我確實知道該命令的開頭是什麼,但我不知道它的歷史有多遠。

更新:以前是 zsh 特定的,但由於答案重疊,請隨意回答任何 shell(或模式(vi/emacs)),只需注意它是否特定。

答案1

Ctrl+R通常是最好的方法,因為描述符說。您也可以使用!string,運行以 開頭的最新命令string,或者!?string?,運行包含 的最新命令string

(我認為這是與這個問題相關的唯一內容,但我在這個答案

答案2

使用 Bash 時,輸入Control-R然後開始輸入。輸入一些文字後重複鍵入Control-R將使您返回到匹配的命令行。

答案3

如果將以下內容新增至~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

並重新啟動 Bash,您可以開始輸入,然後使用Page UpPage Down在以您剛剛輸入的相同前綴開頭的行歷史記錄中前後移動。

(有些人可能更喜歡使用\e[A\e[B,它將取代正常的UpDown操作,而不是綁定新鍵。)

答案4

已經提到的Ctrl-呼叫的互動式提示是最方便的方法。R此外,重新映射UpDown箭頭鍵來搜尋當前在命令列上的前綴的歷史記錄是很流行的,但這需要一些~/.inputrc對文件的更改

經典且互動性較低的解決方案是使用 shell 歷史擴展。打字

!foo

將執行最後一個以fooand開頭的命令

!?foo

將執行包含 的最後一個指令foo。有關歷史擴展的更多資訊可以在Bash 參考手冊,假設您的 shell 是 Bash 或相容的。

相關內容