bash中的反向搜索工具很有用,但它与大多数其他bash命令不同,它似乎绑定到一个键绑定( Ctrl + R )。用户如何使用别名或键入命令来触发此工具?
答案 0 :(得分:4)
反向搜索功能实际上是一个readline函数(反向搜索历史)而不是一个bash内置函数(man builtin或者见builtin commands in the bash reference manual)。据我所知,除了将其绑定到密钥之外,无法调用readline函数。
您可以使用“bind -l -p
”查看绑定到这些函数的所有readline键。 bindable readline commands列表也可以在参考手册中找到。
您始终可以使用history
命令获取历史记录列表,并使用grep
查找您要查找的内容。我发现这很有用:
alias hists="history | grep -v '^ *[0-9]* *hists' | grep $@"
当我运行hists something
时,我会获得与something
匹配的所有命令的列表。我所要做的就是做!#来运行命令。例如:
bash-3.2$ hists emacs
30 emacs
128 emacs
129 emacs
204 emacs
310 emacs .bash_history
324 emacs Documents/todo.txt
bash-3.2$ !324
这并不是你想要的,但它与我能做到的一样接近。
答案 1 :(得分:4)
如果您查看“历史扩展>事件指示符”下的bash或history(3readline)的手册页,您会看到执行此类操作的命令。
!?prof?
将显示包含“prof”的最新命令并立即执行。如果要在不执行命令的情况下打印命令,可以附加“:p”
!?prof?:p
要在命令行编辑命令,请使用上面的示例键入:
!?prof
(不要按回车键)然后按M - ^
这些使用bash的扩展功能。他们只获得最近的比赛。
如果您想编写脚本或别名,请查看内置命令“fc”和“history”(-p或-s)的bash手册页。还有“shopt -s histreedit”。
以下是别名的示例:
alias dothis='`history -p "!?jpg?"`'
(那些是在单引号内的反引号)。
你可以用一些这些命令来做一些很酷的“s / old / new”和其他东西。