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

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

通过按向上键,我可以浏览之前输入的命令。我注意到,如果我修改其中之一,就会改变历史。例如,如果我输入:

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

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

例如,假设我运行一个很长的命令,有很多选项。然后我想再次运行它,进行一个小的更改,所以我回顾历史来找到它,进行更改,但后来意识到实际上我不需要重新运行它,只是想到了另一个选择来代替做。然后稍后,我想回去提醒自己我运行的命令是什么 - 但是等等,历史现在显示错误的事情!

这种情况很少出现,但一旦出现,我就觉得很烦人。有什么办法可以自动保存原始历史记录吗?

答案1

尝试放入你的~/.inputrc

 set revert-all-at-newline on

在某些情况下,您可以发现它处于默认值(关闭)。当执行时返回之前,
它应该强制readline撤消对历史行的所有更改。 accept-line(更多信息见man bash)。

编辑:
CTRL+c自 以来工作set 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

答案2

通常:

CTRL-a # ENTER

会做的。

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

在您的示例中,您的历史记录中将包含:echo a, echo b, echo c, # echo d

相关内容