我已經搜索過,但沒有找到任何與此相關的內容。我正在尋找 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 指令。
若要取得箭頭鍵的轉義碼,您可以執行下列操作:
cat
從終端開始(僅cat
,沒有進一步的參數)。- 在鍵盤上鍵入按鍵,您將獲得諸如
^[[A
向上箭頭和^[[B
向下箭頭之類的內容。 - 用。
^[
\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'
已經用法語解釋了這裡。