对行进行了多次更改后,请还原为原始命令:
revert-line (M-r)
Undo all changes made to this line. This is like
executing the undo command enough times to get back to the beginning.
M
是元密钥,这altr对我来说。
免费但有用的信息
当你已经执行像OP命令以前做(它发生),没有什么可以“撤销”,因为这些命令是由处理和记忆GNU的Readline库,并且不写入$HISTFILE
直到shell退出。我提到这一点的原因是因为你不能只grep
在$HISTFILE
像人们所预料的,它可能不是理想的退出外壳。
因此,这里有两个选项可避免您回滚到所有以前的readline命令。
如果您记得某些命令,请按ctrl+ r并键入您要记住的内容,以搜索包含该字符串的先前命令。再次按ctrl+ r将显示倒数第二个最新的。
例如,键入ls -l
然后ctrl+ r多次查找所需的上一个命令。如果滚动过去,ctrl+ s将从当前位置向前搜索。
该fc
内建命令的bash是有帮助的列表中的索引号以前一起readline的命令。
fc -l -100
将列出readline中的前100个命令。
此外,如果OP知道他正在寻找先前的ls -l
命令,则可以将输出传递给以下命令grep
:fc -l -100 | grep 'ls -l'
这将输出一个先前ls -l
命令的列表,并在其前加一个索引号。输出看起来像这样:
2065 ls -l
现在,您可以使用事件指示符!n
,其中n
的索引号为。在此示例中,执行!2065
将扩展为ls -l
。
尽管这样做无济于事,但是任何希望在修改先前命令时保留最近命令历史记录的人都应参阅中的HISTORY EXPANSION
部分man bash
。这是一些用于修改旧命令而不覆盖历史记录的替代方法。
本Event Designators
节说明如何从最近使用的命令轻松地编辑字符串。
^string1^string2^
Quick substitution. Repeat the previous command, replacing string1 with string2. Equivalent to
``!!:s/string1/string2/'' (see Modifiers below).
例:
$ echo foo
foo
$ ^foo^bar
echo bar
bar
现在,最新命令将显示:
echo foo
echo bar
上面的示例还说明了如何使用sed
事件指示符替换字符串。
!-n Refer to the current command minus n.
因此,如果历史记录中有3条命令,echo foo
则可以使用:
!-3:s/foo/bar
请注意,在这种情况下,事件指示符将作为执行的命令出现在您的历史记录中echo bar
。它不会以出现在历史记录中!-3:s/foo/bar
。
只是把它扔掉,似乎紧密相关,即使它比OP寻找的“撤消”解决方案更多是“不要做”。
ksh
例如,在中,您可以编辑历史记录条目并调用它们,而无需删除条目的“先前版本”。您具有所有可用的调用命令。