如果我按下键盘上的向上或向下箭头,然后修改历史记录中的某些内容,该内容将永远改变。即使我按下 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 或设置版本的行为与此类似,但我不知道与你的版本有何不同。