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 库的软件中生效,例如伊班

阅读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/ 中创建一个名为 setup_readline.sh 的文件,模式为 644,内容如下,登录并检查您首选的密钥:

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

我认为这是实现此目的的最佳方法。主要是如果您使用配置管理系统(例如 chef、puppet 等)

系统配置仍未改变!

答案3

Ctrl + R会为您提供此类功能。开始输入部分命令,它会显示旧命令,您可以使用上下箭头进行导航。

更多信息这里

答案4

为了完成 lesmana 关于~/.inputrc我应该在我的 Trusty 14.04 下创建的回答,请验证/添加~/.bashrc(第一行已经存在于我的~/.bashrc):

shopt -s histappend  
PROMPT_COMMAND='history -a'  

法语版已经解释过了这里

相关内容