在bash中编辑历史logging

bash中,当我回到历史中时,编辑一些命令并运行它,这个编辑的命令被附加到历史logging上,并且原始的命令保持不变。 但是偶尔我会以某种方式影响原来的命令,也就是说,我的编辑将原来的命令replace回历史中。 我不能把手指放在这是怎么发生的。 有人可以解释吗? 我的目标是避免这种情况,因此对前一个命令的任何编辑都会附加到历史logging中,而不会replace原始文件。

Solutions Collecting From Web of "在bash中编辑历史logging"

如果您回到以前的某个命令并对其进行编辑,但是不要执行它(而是使用历史命令转到某个其他命令并执行它),那么编辑将保留在您的历史列表中

这是我自己的答案,如果可以的话,请更正或提供更多细节。

在“bash”(“set -o vi” – “使用vi风格命令行编辑界面”)中设置“vi”选项时,有两种从历史记录编辑命令的模式。

第一种模式(我们称之为“基本”)是当您立即使用Backspace,Del和字符键开始编辑时。

另一种模式是“vi模式”,当你按Esc时输入。

如果你想保持你的历史不变,不要在同一编辑中使用两种模式。 我不知道bash是如何工作的,但是你可以这样想:

  1. 进入“vi模式”将在“基本模式”中完成的任何更改应用于原始命令,并创建可使用vi样式命令进一步编辑的命令副本。
  2. 当您按下Enter(执行),Up,Down或j,k(移至历史中的另一个命令)时,将应用更改。
  3. 如果您按Ctrl-C,则不会应用更改。
  4. 使用基本或vi风格编辑ALONE不会影响历史记录中的原始命令。

做什么

echo $HISTCONTROL echo $HISTIGNORE 

给你?

编辑:

我能够通过执行以下步骤来重现与您所看到的相似的行为:

  • 在shell提示下,输入:

    echo abcd
    echo efgh

  • 向上按两次箭头,显示“echo abcd”

  • 按1在最后添加该字符

  • 按下escape键进入命令模式

  • 按向左箭头两次,使光标在“c”

  • 按x删除“c”

  • 按回车

现在,当你回顾历史时,你会在最后看到一个新的条目:

 echo abd1 

和以前有“回声abcd”的条目现在看起来像这样:

 echo abcd1 

这是一种方式,我敢肯定还有其他的。