有什么方法可以撤消bash历史记录的修改?


9

通过按下,我可以浏览以前输入的命令。不过,我注意到,如果我修改其中之一,则会更改历史记录。例如,如果我键入:

echo a
echo b
echo c
[up][up][backspace]d[ctrl+c]

历史现在显示,第二个命令echo d不是echo b。如何保持echo b历史第一?

例如,假设我运行了一个很长的命令,其中包含很多选项。然后我想再次运行它,但有一个小的更改,因此我回顾了历史以查找并进行更改,但是随后意识到实际上我不需要重新运行它,只是想到了另一个选择代替。然后,我想回去提醒自己我执行的命令是什么-但是,等等,历史记录现在显示了错误的内容!

这种情况很少出现,但是当我发现它确实很烦人时。有什么方法可以自动保存原始历史记录?


1
history您可以看到所有命令。之后,您可以选择所需的内容。您现在使用哪个外壳?
Hastur 2014年

6
我无法重现。如果将c更改为d,请按CTRL + C并再次按[up],它仍然显示echo c
Martin von Wittich

Answers:


6

试着把你的 ~/.inputrc

 set revert-all-at-newline on

在某些情况下,您可以在默认值(关)中找到它。在执行返回之前,
它应强制readline撤消对历史记录行的所有更改accept-line。(有关更多信息man bash)。

编辑:
CTRL+cset revert-all-at-newline on工作以来罚款bash-4.3.30

# GNU bash, version 4.3.30(1)-release
# Emacs-mode

echo c
[up][backspace]d[Ctrl+c][up] # you should see echo c

但:

echo c
[up][backspace]d[down][Ctrl+r]echo[Ctrl+j][Ctrl+c][up] # you should see echo d

很好,这是更好的解决方案。有趣的是,尽管完全擦除了该行或向下箭头,然后按Enter或运行另一个命令将恢复历史记录,但CTRL-c实际上会使它记住修改后的值。
迪安·塞雷内维

@DeanSerenevy:谢谢,我也喜欢您的解决方法,我也开始使用CTRL-a nano:-)
Hastur

4

通常:

CTRL-a # ENTER

会做的。

如果执行修改后的命令,将记住原始命令。当然,您实际上不想执行,因此可以使用注释掉行#

在你的榜样,你将不得不在你的历史:echo aecho becho c# echo d


1
alt-shift-3如果您的bash正在使用,则可以按注释掉当前命令行readline/insert-commentman 3 readline(或man bash)有关详细信息。
cychoi
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.