it-swarm.cn

搜索壳牌历史的最佳方法

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

pdate:以前是zsh特有的,但是由于答案重叠,在这里可以随意回答任何Shell(或模式(vi/emacs)),请注意是否特定。

82
xenoterracide

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

(我认为这是与此问题相关的唯一内容,但我在 此答案 中涵盖了更多的历史记录命令)

78
Michael Mrozek

使用Bash时,键入 Control--R 然后开始输入。打字 Control--R 输入一些文本后反复反复将您移至匹配的命令行中。

32
grendel

不确定这是否有帮助,但我喜欢使用 ctrl--r 然后开始键入命令。它应该遍历您的历史并为您呈现第一场比赛。要切换比赛,只需点击 ctrl--r 再次。

18
decriptor

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

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

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

(有些人可能更喜欢使用\e[A\e[B,它将替换正常 Up 和 Down 操作,而不是绑定新键。)

17
ephemient

调用的交互式提示 Ctrl--R已经提到过的,是最方便的方法。另外,重新映射很受欢迎 Up 和 Down 箭头键在历史记录中搜索当前在命令行上的前缀,但是这需要一些 更改~/.inputrc文件

经典且较少交互的解决方案是使用Shell历史记录扩展。打字

!foo

将执行以foo开头的最后一条命令,然后

!?foo

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

9
Adam Byrtek

如果您添加stty -ixon到您的~/.bashrc文件然后 Ctrl--s 将以相反的方向 Ctrl--r

6

如果您输入!ls,然后bash将查看您的历史记录并执行以“ ls”开头的最新命令

3
Kevin M

可能是zsh特有的。在研究中 此答案找到vi-history-search-backward允许使用 / 在vi模式下(我没有提到过),您可以使用 n 和 N 分别向前和向后搜索(按后 enter)。

2
xenoterracide

我很惊讶没有提到它-但是您可以通过执行以下操作在bash或ksh中选择vi模式:

set -o vi

...或将其用作~/.inputrc的内容(用于GNU bash等程序中使用的readline):

set editing-mode vi

然后,您可以使用 Esc 进入命令模式并使用 k 回顾历史 j 前进。您也可以使用 / 正常搜索,以及 ? 反向搜索。

如果您使用~/.inputrc,则这不仅适用于GNU bash,而且适用于任何使用GNU MySQL命令Shell和CPAN Shell一样。

2
Mei

在使用反向搜索(使用Ctrl-R命令)时要向前切换:

  1. 打开您的.bashrc文件:
    Sudo gedit ~/.bashrc

  2. 添加此行(字母“ f”可以替换为系统尚未使用的另一个字母)

    bind '"\C-f": forward-search-history' 
    
  3. 使用以下命令关闭文件并更新.bashrc(或打开另一个终端):
    source ~/.bashrc 要么 . ~/.bashrc

现在,您可以通过快捷键在历史记录中前进:Ctrl + f

在Ubuntu 18.04 LTS上工作

2
Franklin TCHATATH

我大部分时间都使用以下两种方式。
但是请注意,他们两个都在搜索起始字符。

  1. tcsh:键入命令的一些字符,然后 Esc+p 它将显示从该键序列开始的上一个命令,再次按下它将显示另一个命令。
  2. ksh:使用fc -e - <SPACE><first few char for your previous >这将运行与该序列匹配的最后一个命令。

我找不到类似的东西 Ctrl+R 在Bash中获取我的ksh和tcsh。

1
Hemant

有一种使用方法 Ctrl--R 与tcsh。在您的~/.cshrc中添加以下内容:

bindkey "^r" i-search-back(这只是一个插入符号和字母r)

这对我来说是最大的省时方法。

1
Alain

与@ephemient的答案类似,但您可以将.bashrc放入

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

并输入词组的一部分,然后使用向上/向下箭头浏览匹配的最新选项。这是matlab的默认行为。

对于大多数人来说,如果您想将设置移植到新系统上,记得记住~/.bashrc,那么您就必须抓住~/.inputrc

1
Matt S.

是的,它存在,至少在使用zsh的情况下。只需开始输入命令,然后按 M-p (ESCp),它将找到与您输入的内容匹配的先前命令。再按一次即可找到下一个匹配项。

0
dkagedal