如何搜索bash历史记录并重新运行命令?

如何搜索bash历史记录并重新运行命令?

我可以在 bash 中搜索历史记录并运行结果吗?

答案1

在命令行中键入Ctrl R并开始输入上一个命令。出现结果后,继续点击Ctrl R以查看其他匹配项。当您想要的命令出现时,只需按Enter

请注意,虽然Ctrl R是默认值,但如果您希望命令(reverse-search-history)绑定到,Ctrl T则可以使用以下命令进行配置:

绑定'“ \ ct”:反向搜索历史'

还有许多其他可绑定 readline 的命令可供您使用。请查看bash手册页

Bash有许多搜索和访问交互式命令历史的设施history

$历史记录

将打印命令列表以及数字索引,例如:

$历史
1 清除
2 ls -al
3 vim〜/somefile.txt
4历史
$

然后,您可以使用数字索引来执行任何这些命令,方法是在索引前面加上一个!, ,例如米奇指出:

$!1

将执行clear命令。history 内置命令本身具有许多功能,您可以在bashhistory手册页中查看更多功能。

您还可以在使用指定器时指定相对负偏移!,因此使用上面的历史记录列表,如果我们想vim再次执行,我们可以这样做:

$ !-2

这基本上就是告诉 bash 执行你“两个命令之前”运行的命令。要运行历史列表中的上一个命令,我们只需使用!!(这只是 的简写!-1)。

指定!器不会将您限制在数值上指定要运行的命令。Hayalci表明您可以指示bash基于(使用!)或命令本身中的文本开始执行命令(再次使用!?clear

$ !cl

然后按Enter。那 呢vim?很简单:

$!?一些

来自Hayalci对内置的呼吁是shopt

$ shopt -s Histerify

!这将启用历史验证,这样就不会盲目执行与、!!和指示符匹配的命令!?,而是在命令行上填写,这样您就可以在执行它们之前确保它们不会造成任何危害。当您以 root 用户身份执行命令时,这一点更为重要。您可以在启动文件中设置此选项,.bashrc以便在您登录时设置它。

正如已经指出的那样,所有这些信息都可以从bash手册页. 有关 !、!! 和 !? 指示符,请参阅第9.3 历史扩展

答案2

您还可以这样做:

history | grep "stuff"

它会返回类似的东西

num stuff

然后你可以输入

!num

答案3

另外crtl+R,您也可以通过输入以下代码来搜索历史记录

!text

这将搜索历史记录以查找最近的命令开始用“文字”。

但是我建议您将其放在.bashrc中,以防止执行错误的命令。

shopt -s histverify

这将指示 bash,在任何历史操作(如!!:s/prev_text/after_text),它会将结果行放入命令提示符中。然后您可以查看或编辑该命令,然后按 Enter。

答案4

我有一个很棒的别名。

alias h="history | grep -E -v '^ *[0-9]+ *h ' | grep "

像使用

h aliases
2003  less .bash_aliases

相关内容