我可以在 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 内置命令本身具有许多功能,您可以在bash
和history
手册页中查看更多功能。
您还可以在使用指定器时指定相对负偏移!
,因此使用上面的历史记录列表,如果我们想vim
再次执行,我们可以这样做:
$ !-2
这基本上就是告诉 bash 执行你“两个命令之前”运行的命令。要运行历史列表中的上一个命令,我们只需使用!!
(这只是 的简写!-1
)。
指定!
器不会将您限制在数值上指定要运行的命令。Hayalci表明您可以指示bash
基于(使用!
)或命令本身中的文本开始执行命令(再次使用!?
)clear
。
$ !cl
然后按Enter。那 呢vim
?很简单:
$!?一些
来自Hayalci对内置的呼吁是shopt
:
$ shopt -s Histerify
!
这将启用历史验证,这样就不会盲目执行与、!!
和指示符匹配的命令!?
,而是在命令行上填写,这样您就可以在执行它们之前确保它们不会造成任何危害。当您以 root 用户身份执行命令时,这一点更为重要。您可以在启动文件中设置此选项,.bashrc
以便在您登录时设置它。
答案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