Bash 歷史搜索,部分 + 向上箭頭

Bash 歷史搜索,部分 + 向上箭頭

我已經搜索過,但沒有找到任何與此相關的內容。我正在尋找 bash 中使用終端的功能。

很久以前,我有一個 debian 系統上的用戶,一個朋友為我設定了一個方便的歷史搜尋功能(我相信我當時使用了 tcsh),我可以在其中鍵入上一個命令的開頭,然後按向上箭頭,它會根據部分字串進行搜尋。

例如,如果我的歷史是:

./script.pl
./script.pl arg1
cat output
cat output | grep yada

我輸入.,然後按向上箭頭,它會顯示:./script.pl arg1。再按一次就會顯示./script.pl等等。

非常像它會grep在 .bash_history 上執行操作。有沒有辦法獲得這個功能?

答案1

建立~/.inputrc並新增這些行:

# Respect default shortcuts.
$include /etc/inputrc

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward

提示:請閱讀底部的說明$include /etc/inputrc或如果您已經擁有該文件該怎麼辦~/.inputrc

以 開頭的行#是註解。

我不記得什麼是向後的,什麼是向前的。嘗試一下。也許你必須前後切換。

關閉並重新開啟所有終端以使新行為生效。


一些背景資訊:

bash 正在使用閱讀線來處理提示。~/.inputrc是readline的設定檔。請注意,這也會在使用 readline 程式庫的其他軟體中生效,例如Python

閱讀bash手冊有關 readline 的更多資訊。在那裡你還可以找到更多歷史相關的 readline 指令

若要取得箭頭鍵的轉義碼,您可以執行下列操作:

  1. cat從終端開始(僅cat,沒有進一步的參數)。
  2. 在鍵盤上鍵入按鍵,您將獲得諸如^[[A向上箭頭和^[[B向下箭頭之類的內容。
  3. 用。^[\e

有關更多信息^[,請\e參閱此處:https://unix.stackexchange.com/a/89817/380515


關於線路$include /etc/inputrc

Readline 嘗試讀取~/.inputrc設定。如果該檔案不存在,它將嘗試讀取/etc/inputrc。這意味著如果~/.inputrc存在,它將不會讀取/etc/inputrc

一些發行版已經在/etc/inputrc.如果您隨後創建,~/.inputrc您將丟失準備好的配置。這可能是也可能不是您想要的。要仍然保留準備好的配置,您/etc/inputrc可以使用.$include /etc/inputrc~/.inputrc

如果您已經擁有該文件~/.inputrc,則表示您已經知道自己在做什麼。或者你從建立你的系統的人那裡繼承了它。或者您之前遵循了不同的指南,該指南告訴您創建文件,但忘記了它。無論哪種方式,您可能需要檢查/etc/inputrc並決定是否要將其保留在線路中$include /etc/inputrc

答案2

在 /etc/profile.d/ 中建立模式為 644 的名為 setup_readline.sh 的文件,其中包含以下內容,登入並檢查您的首選金鑰:

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

我認為這是最好的方法。主要是如果您使用組態管理系統,例如 Chef、Puppet 等

而且系統配置仍然沒有改變!

答案3

Ctrl + R會給你這種功能。開始輸入部分命令,它會顯示舊命令,您可以使用向上和向下箭頭進行導航。

更多資訊這裡

答案4

要完成 lesmana 關於~/.inputrc我應該在 Trusty 14.04 下創建的答案,請驗證/添加~/.bashrc(第一行已存在於 my 中~/.bashrc):

shopt -s histappend  
PROMPT_COMMAND='history -a'  

已經用法語解釋了這裡

相關內容