将历史命令放入命令行而不执行它

将历史命令放入命令行而不执行它

我使用 !n ,其中 (n) 是用于执行历史文件中的一行的行号,我想在命令提示符下执行该行,我通过history|less找到该命令提示符。

但有一个命令行历史事件我希望手动修改。如何在命令行中插入历史事件内容而不实际执行它,以便我可以修改然后按回车键?

最好的,

答案1

要请求打印命令而不是在历史替换后执行命令,请添加:p 修饰语,例如!42:p。生成的命令也将输入历史记录中,因此您可以按 进行Up编辑。

如果您有histverify 选项设置 ( shopt -s histverify),您将始终有机会编辑历史替换的结果。

fc内置提供对历史扩展的有限访问(无字指示符),并允许您在外部编辑器中编辑先前的命令。

您可以使用!prefix来引用以 开头的最后一个命令prefix,并!?substring使用 来引用以 开头的最后一个命令substring。当您知道自己在寻找什么时,这可以节省大量时间history | less

搜索以前历史记录的另一种方法是增量搜索:按Ctrl+R并开始输入您要查找的内容的子字符串。按Ctrl+R转到迄今为止搜索字符串的上一个出现位置,如果走得太远,则按Ctrl+ 。SCtrl+ RCtrl+SBackspace普通字符之外的大多数键都会终止增量搜索并发挥其通常的作用(例如,箭头键将光标移动到您到达的行中,Enter以运行命令)。

答案2

另一个小:Alt+#

注释掉当前行并将其移动到历史缓冲区中。

因此,当您组装命令行并且需要发出临时命令来查找文件时,您只需按Alt+ #,发出另一个命令,在历史记录中查找,取消注释并继续。

答案3

您可以在按 Enter 之前使用魔法空间来扩展历史记录。在你的 .inputrc 中,将空间映射到魔法空间:

$if Bash
     Space: magic-space
$endif

现在,每当您在历史规范后键入空格时,它都会立即展开 - 如果您想编辑它,这也很方便!

答案4

我通常使用Ctrl+r进行搜索,然后使用Ctrl+e转到行尾而不执行。

相关内容