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