搜索 shell 历史记录的最佳方式

搜索 shell 历史记录的最佳方式

有没有比 grep 更好的方法来搜索我的历史文件中的命令?我确实知道该命令的开头是什么,但我不知道它的历史有多远。

更新:以前是 zsh 特定的,但由于答案重叠,请随意回答任何 shell(或模式(vi/emacs)),只需注意它是否特定。

答案1

Ctrl+R通常是最好的方法,因为描述符说。您还可以使用!string,运行以 开头的最新命令string,或者!?string?,运行包含 的最新命令string

(我认为这是与这个问题相关的唯一内容,但我在这个答案

答案2

使用 Bash 时,输入Control-R然后开始输入。输入一些文本后重复键入Control-R将使您返回到匹配的命令行。

答案3

如果将以下内容添加到~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

并重新启动 Bash,您可以开始输入,然后使用Page UpPage Down在以您刚刚输入的相同前缀开头的行历史记录中前后移动。

(有些人可能更喜欢使用\e[A\e[B,它将取代普通的UpDown操作,而不是绑定新键。)

答案4

已经提到的Ctrl-调用的交互式提示是最方便的方法。R此外,重新映射UpDown箭头键来搜索当前在命令行上的前缀的历史记录是很流行的,但这需要一些更改为~/.inputrc对文件

经典且交互性较低的解决方案是使用 shell 历史扩展。打字

!foo

将执行最后一个以fooand开头的命令

!?foo

将执行包含的最后一个命令foo。有关历史扩展的更多信息可以在Bash 参考手册,假设您的 shell 是 Bash 或兼容的。

相关内容