如何防止 Bash 改变历史记录?

如何防止 Bash 改变历史记录?

如果我按下键盘上的向上或向下箭头,然后修改历史记录中的某些内容,该内容将永远改变。即使我按下 Ctrl-C,然后尝试再次打开它,它仍然会改变——我的历史记录中丢失了该条目。

我怎样才能防止这种情况发生?

答案1

您需要 readline 设置:

set revert-all-at-newline on

您可以将其放入~/.inputrc(参见下面的注释),或者放入bind 'revert-all-at-newline on'您的~/.bashrc

演示:

$ man bash
$ bind 'set revert-all-at-newline on'
$ man bsh # up arrow and edit
No manual entry for bsh
$ man bash # three up arrows

更多详细信息请参阅Bash 手册页

revert-all-at-newline

如果设置为“ on”,则执行 accept-line 时,Readline 将在返回之前撤消对历史行的所有更改。默认情况下,历史行可能会被修改,并在对 readline 的调用中保留单独的撤消列表。默认值为“ off”。


笔记:

~/.inputrc如果为了设置而创建了一个新文件revert-all-at-newline,请注意 bash 将使用此文件中的 readline 设置代替文件中可能存在的任何设置/etc/inputrc。也就是说,中指定的任何设置/etc/inputrc将不再有效。因此,如果文件/etc/inputrc存在,最好~/.inputrc从以下行开始:

$include /etc/inputrc

答案2

我输入:

ls /tmp

- 太棒了。现在我想进入

ls /temp 

并可以阻止它进入历史记录,因此阻止它覆盖 ls /tmp,如果我以空白开始命令:

 ls /temp

这很难看出,但如果你知道......

它由

export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth

ignoreups 仅忽略重复的命令,ignoreboth 忽略行首的空格,这对于隐藏未隐藏的密码很有用。

但也许你正在寻找一个解决方案,最终得到两个命令,一个未修改的旧命令和一个新命令。我的 bash 或设置版本的行为与此类似,但我不知道与你的版本有何不同。

相关内容