如何使用历史记录实用程序复制先前输入的命令而无需再次运行它?


14

我可以history在CentOS 上使用该命令来获取以前输入的命令的列表,但是,如果我执行以下操作:!372,历史记录将尝试运行引用的命令。

我需要上一个运行命令出现在当前光标处。这是一个例子:

[dev@home ~]$ previous_command_no_execute!372  

Answers:


25

怎么样,把它放在你的命令行上:

$ !372

然后按,ESC然后按CTRL+E。这将在命令行上自动扩展,而无需实际运行。(还扩展了行中的所有其他内容,包括env vars)

据我所知,这仅适用于Bash。


是的,这是确切的解决方案。
centosnoob 2012年

1
对于zsh中的解决方案,请在键入后单击tab,!372它将为您扩展它。
里德2012年

10

您可以使用Ctrlr原始命令然后输入一些字符,例如

(reverse-i-search)`/etc': sudo /etc/init.d/apache2 restart

上面我输入的Ctrl-r /etc内容将其sudo /etc/init.d/apache2 restart从历史记录中拉出


6

history | grep 372 应该工作吧?

编辑:

另外,您可以执行类似echo !372 > /dev/clip将命令目录放入剪贴板的操作。


一直为我工作...
voretaq7 2012年

否,只是找到先前运行的特定命令。
centosnoob 2012年

然后我自己和@ voretaq7都误解了您的问题。您能否更清楚一点?
MDMarra 2012年

@MDMarra我已经更新了问题。我希望它能进一步阐明。
centosnoob 2012年

@centosnoob查看您的更新,并假设您的控制台支持鼠标和复制粘贴(如今,很少直接将其放置在没有复制粘贴功能的终端式控制台上),复制和粘贴解决方案的痛苦确实最小。我在答案中概述的vi风格命令编辑是另一个选择,但我是vi狂热者,甚至都不使用vi风格命令行编辑...
voretaq7 2012年

4

MDMarra提供了一种简单的方法(history|grep并假设您拥有桌面环境,则可以使用桌面环境进行复制/粘贴)。我将提供我所说的“困难方式”,如果您没有台式机环境或鼠标,这种方法可以使用。

假设您将bash作为shell运行:

$ set -o vi
$ ESC372k

(现在,您已经拥有在线上运行372个命令的命令,并且处于vi-style命令模式。如果使用ex/,则进行编辑。vi


有趣。这似乎只有在您早些时候运行“ set -o vi”时才起作用。可能必须将其放入bash个人资料或其他内容中。
马特

这就是“我一直使用vi,为什么不使用vi绑定编辑bash中的行”之一,您会震惊地意识到这一点。要花一些时间才能习惯,然后其他人使用的emacs样式的绑定就会变得奇怪而无用。
cjc 2012年

@Matt是-您需要将编辑模式设置为vi-style编辑。它应该在您工作后就可以使用set -o vi,并且应该在您的整个历史记录中起作用(编辑模式只是Shell命令历史记录和其他内容的接口)。
voretaq12年

@cjc我使用vi作为我的首选编辑器,但是我不使用vi样式绑定来编辑我的命令行(我只是偶然知道如何以vi模式进行此操作,但是其他人已经发布了等价于emacs-mode,它可能更友好:)。
voretaq12年

4

执行所需操作的最简单,最快的方法是运行:

!372:p

其次是Enter


0

您是在台式机系统还是服务器上?

在外壳打开的我的Kubuntu桌面系统上,它支持使用鼠标突出显示。我通常只用鼠标突出显示文本,然后单击鼠标中键以将其粘贴到其中。这对您有用吗?

因此,您可以grep命令。突出显示文本。用鼠标中键粘贴它,然后对其进行编辑。

也许有更好的方法,但这对我有用。


0

没有执行自动粘贴的命令,但是您可以在执行之前将任何命令调入编辑器进行编辑。这样可以实现您想要的功能,但是退出后该命令将执行,因此,如果要中止操作,则应在退出编辑器之前清除编辑缓冲区。

fc -e vi 372372

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.