如何自动完成命令历史记录中的命令?

如何自动完成命令历史记录中的命令?

bash 是否有一个组合键可以自动竞争历史命令?例如,在 ipython 和 matlab 中,这是通过在输入几个字符后按向上箭头来实现的。

答案1

首先,tab在 bash 中点击会更好,因为它会自动完成 PATH 中的所有可执行文件,无论它们是否在历史记录中。也就是说,有多种方法可以从历史记录中获取命令:

  1. 使用它的号码。如果你知道你想要的命令是 3 个命令之前的,你可以运行

     !-3
    

这将重新执行您之前运行的三个命令。

  1. 搜索一下。输入Ctrlr并开始输入任何文本。将显示历史记录中与您的文本匹配的第一个命令,点击enter将执行它。

  2. 击中(向上箭头)。这将显示最后一个命令,再次按下它,您将进入命令历史记录。当你找到你想要的那个时,点击enter

  3. 将这些行添加到您的文件中~/.inputrc(如果文件不存在则创建该文件):

     "\e[A": history-search-backward
     "\e[B": history-search-forward
    

要立即加载文件,请运行bind -f ~/.inputrc(来源)。现在,输入您之前运行的命令之一的前几个字符,然后点击。将显示历史记录中以这些字符开头的第一个命令。再次点击即可查看其余内容,enter找到所需内容后点击即可。

  1. 使用history命令。正如@Isaac 所解释的,这将列出存储在历史文件中的所有命令。

答案2

您可以使用命令检查历史序列上的命令位置history。然后就可以执行了!<number_in_the_sequence>。我希望这有帮助。

答案3

您还可以使用history特定命令的输出并通过管道传输。

例如,如果您cd一整天都在文件系统中工作,只需要提醒哪些目录正在处理

history | grep cd

然后,您可以复制/粘贴该命令,或者!n(其中 n 是历史文件中的行号)重新执行它。

相关内容