用bash编辑历史记录

ult*_*ian 16 linux bash shell command-line

在bash中,当我回到历史记录中,编辑一些命令并运行它时,这个编辑过的命令会附加到历史记录中,原始命令将保持不变.但每隔一段时间我就会设法影响原始命令,即我的编辑会替换历史记录中的原始命令.我无法理解这是怎么发生的.谁能解释一下?我的目标是避免这种情况,因此对前一个命令的任何编辑总是会附加到历史记录中,并且永远不会替换原始命令.

Gra*_*ray 8

我以某种方式设法影响原始命令,即我的编辑替换了历史记录中的原始命令。

对。如果您返回历史记录并编辑该行而不按回车键执行命令而是移动到另一个历史记录条目,则您刚刚编辑了历史记录条目。如果您随后列出您的历史记录,您将*在行上看到一个,表明您已对其进行了编辑。我发现这个“功能”非常令人沮丧。其他人提供了如何重现这一点的好例子。

我的目标是避免这种情况,因此对先前命令的任何编辑都会附加到历史记录中,而不会替换原始命令。

我也想禁用它。我通过unix.stackexchange上的这个答案找到了解决方案。

总而言之,您需要启用revert-all-at-newline默认关闭的readline 设置。如果设置打开,那么当您执行下一个命令时,bash 将恢复您对历史记录所做的任何更改。

要在您的 shell 中启用此设置,您应该将以下内容添加到您的~/.inputrc文件中,然后重新启动您的 shell:

$include /etc/inputrc
set revert-all-at-newline on
Run Code Online (Sandbox Code Playgroud)

第一行是必需的,因为我想如果您提供自己的.inputrc文件,/etc/inputrc则不包含默认文件,这可能不是您想要的。


Chr*_*odd 5

如果返回上一个命令并对其进行编辑,但随后不执行它(而是使用历史命令来执行其他命令并执行它),则所做的编辑将保留在历史列表中。

Ctrl + C编辑后按,可以抵消此行为。它使原始命令保持原样,即取消了对原始命令的记住编辑。

  • 但是,如果您返回相同的命令并执行它(进行或不进行进一步编辑),则历史记录将恢复原状。另一方面,如果退出bash,则这些编辑将被永久记录。 (2认同)