找出我上次执行的以某种方式启动的命令?


9

在bash命令行环境中,您可以!!重新运行最后一个命令。您可以按向上箭头查看您运行的最后一个命令。但是,如果您只想查看但不运行以某种方式开始的最后一个运行的命令怎么办?


1
您能否修改您的问题。我仍然不清楚你在问什么。

Answers:


19

如果您通过Ctrl+ 搜索历史记录r并键入命令的某些字母,而不是按,Enter而是按,则该命令将显示并且将不会运行。另一种选择是:

history | grep 'mycommand'

这个很好的历史速查表也可能会有所帮助。


1
而且,如果您不想寻找第一个匹配项,并且想要继续向后搜索,请一次又一次按ctrl-r。这只是bash历史记录和readline库提供的许​​多强大命令之一。
Orion 2014年

考虑到您的答案已经过验证,我会推荐的,如果您想"^.\{7\}pattern"在答案中使用该表达式,欢迎您这样做!

如果您想编辑几个命令并重新运行它们,也可以使用fc ### ###
Kiwy 2014年

10

您可以显示最近运行的命令,通过追加:p!!

$ echo 123
123
$ !!:p
echo 123

如果要显示以特定名称运行的show last命令,请使用一个感叹号:

$ echo 123
123
$ pwd
/home/cuonglm
$ !echo:p
echo 123

4

据我所知,这里的每个答案都是不可移植的。对于便携式选项,请考虑POSIX保证fc

    $ man fc

-e editor使用由editor命名的编辑器来编辑命令。编辑器字符串是一个实用程序名称,可以通过 PATH变量进行搜索...当未指定 -e时, FCEDIT变量中的值将用作默认值。如果 FCEDIT为null或未设置,则 ed将用作编辑器。

-l (字母ell。)列出命令,而不是在命令上调用编辑器。这些命令应按照受 -r影响的第一个和最后一个操作数指示的顺序写入,每个命令后面均带有命令编号。

-n -l列出时,禁止命令编号。

-r 颠倒列出的命令(带有-l或已编辑的命令(既没有-l也没有-s的顺序。

-s 在不调用编辑器的情况下重新执行命令。

经营者

首先最后 选择要列出或编辑的命令。可以访问的先前命令的数量应由 HISTSIZE变量的值确定。first或last或两者的值应为以下值之一:

[+或- ]数目 的正(或表示命令号数; 可以使用 -l选项显示命令编号...例如, -1是紧接的前一个命令 ...

当使用-l选项列出命令时,列表中每个命令的格式应如下:

    "%d\t%s\n", <line number>, <command>

如果同时指定了-l-n选项,则每个命令的格式应为:

    "\t%s\n", <command>

如果 由多行组成,第一行之后的行应显示为:

    "\t%s\n", <continued-command>

但一定要使用-l-e如果你希望看到/编辑你的命令。默认情况下,fc将打开FCEDIT 中请求的命令列表(请注意,该列表与您的EDITOR环境变量不同),并且当FCEDIT退出时,fc将运行已编辑的命令。

无论如何,这个问题的具体答案可能是:

    % fc -l -1

或没有行号:

    % fc -ln -1

或最后五个命令以相反的顺序:

    % fc -lrn -1 -5

在您的传呼机中:

    % fc -lrn -1 -5 |$PAGER

您最后一次致电fc

    % fc -l fc

+1努力。但是,该问题被标记为bash
grebneke 2014年

它适用于bash,以及其他所有功能。使用bash并不排除可移植性,但是一定会养成不良习惯。
mikeserv

考虑到可移植性,此处的最佳答案应该是公认的答案。
wildeyes 2015年

3

点击Ctrlr然后开始输入您要查看的命令。bash将逐渐完成。当您满意时,请点击Enter以重新运行它或Ctrlg中止。


2

如果只想使用最后一个命令,请使用:

 history | cut -c 8- | tail -n 2 | head -n 1 

如果您希望能够重复执行此操作,请在空格前history使用或使用:

 history | cut -c 8- | grep -Ev '^history' | tail -n 1

如果您只想查看以pattern开头的最后一条命令xyz

 history | cut -c 8- | grep -E '^xyz'  | tail -n 1 

但是,如果模式是“历史”的初始字符,那么这将不起作用,然后您需要执行以下操作:

history | cut -c 8- | grep -Ev 'history \|' | grep -E '^hist'  | tail -n 1 

您第一次使用时有错字cut
2014年

1
bind '"\ep": history-search-backward'
bind '"\en": history-search-forward'

然后,您可以输入一些文本,然后Alt-p搜索以相同的开头的最后一个命令(和Alt-pAlt-n以通过它们来回循环)。

(这些是zsh)中类似小部件的默认键绑定


0

将这些行添加到文件中~/.inputrc

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

然后source ~/.inputrc在您的Shell中(或仅重新启动Shell)。

现在,您可以键入命令的几个字母,然后使用向上/向下箭头来循环浏览以这几个字母开头的命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.