TLP*_*TLP 192 command-line bash history bashrc
我已经搜索过,但没有找到任何关于此的内容。我正在使用终端在 bash 中寻找功能。
回到过去,我有一个用户在 debian 系统上,一个朋友为我设置了一个方便的历史搜索功能(我相信我当时使用了 tcsh),我将在其中输入上一个命令的开头,点击向上箭头,它会根据部分字符串进行搜索。
例如,如果我的历史是:
./script.pl
./script.pl arg1
cat output
cat output | grep yada
Run Code Online (Sandbox Code Playgroud)
然后我输入.,然后按向上箭头,它会显示我:./script.pl arg1。再按一次,它会显示./script.pl,等等。
非常像它会grep在 .bash_history 上执行。有没有办法获得这个功能?
les*_*ana 248
打开您的~/.inputrc并添加以下行:
## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward
Run Code Online (Sandbox Code Playgroud)
提示:如果您没有此文件,请在底部阅读如何在不丢失默认绑定的情况下创建它。
以 开头的行#是注释。我不记得什么是向后的,什么是向前的。试验它。也许你必须来回切换。
只需重新打开可能打开的终端窗口即可使新行为生效。
一点背景资料:
Bash 使用readline来处理提示。~/.inputrc是readline的配置文件。请注意,这也将在其他使用 readline 库的软件中生效,例如IPython。
有关 readline 的更多信息,请阅读bash 手册。在那里您还可以找到更多与历史相关的 readline 命令。
要获取箭头键的转义码,您可以执行以下操作:
cat终端开始(只是cat,没有进一步的参数)。^[[A向上箭头和^[[B向下箭头之类的东西。^[为\e。有关更多信息^[并\e参见此处:https : //unix.stackexchange.com/a/89817/380515
如果您还没有~/.inputrc文件,请复制默认设置,否则所有其他默认键绑定将被覆盖:
cp /etc/inputrc ~/.inputrc
Run Code Online (Sandbox Code Playgroud)
或~/.inputrc以以下行开始您的文件
$include /etc/inputrc
Run Code Online (Sandbox Code Playgroud)
小智 39
在 /etc/profile.d/ 中创建一个名为 setup_readline.sh 模式为 644 的文件,内容如下,登录并检查您的首选密钥:
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
Run Code Online (Sandbox Code Playgroud)
我认为这是最好的方法。大多数情况下,如果您使用配置管理系统,例如厨师、木偶等
系统配置仍然保持不变!
小智 7
以下解决方案结合并扩展了上述一些方法:将以下行添加到您的~/.bash_aliases文件中(不需要~/.inputrc)以实现以下行为:
bind '"\e[1;5A":history-search-backward'
bind '"\e[1;5B":history-search-forward'
bind '"\e[1;5C":forward-word'
bind '"\e[1;5D":backward-word'
Run Code Online (Sandbox Code Playgroud)
重新登录 shell(或运行source ./bash_aliases)以应用更改。
要完成 lesmana 关于~/.inputrc我应该在 Trusty 14.04 下创建的答案,请验证/添加~/.bashrc(第一行已存在于 my 中~/.bashrc):
shopt -s histappend
PROMPT_COMMAND='history -a'
Run Code Online (Sandbox Code Playgroud)
这里已经用法语解释了。