我搜索过,但没找到任何相关信息。我正在寻找 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 命令。
要获取箭头键的转义代码,您可以执行以下操作:
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/ 中创建一个名为 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'
法语版已经解释过了这里。