为什么删除 bash 历史记录还不够?

bun*_*den 19 linux bash bashrc

我曾经认为删除我的 bash 历史记录足以清除我的 bash 历史记录,但昨天我的猫在我键盘的右侧乱搞,当我回到我的电脑时,我看到了我一个月前输入的东西,然后我开始疯狂地按下所有按键,寻找可能触发它的原因。原来 UPARROW 键即使在删除 .bash_history 之后也会显示我的 bash 历史记录。

如何真正删除我的 bash 历史记录?

ImH*_*ere 28

在某些情况下(某些 bash 版本),执行以下操作:

$ history -c; history -w
Run Code Online (Sandbox Code Playgroud)

或者干脆

$ history -cw
Run Code Online (Sandbox Code Playgroud)

将清除内存中的历史(向上和向下箭头将不得不列表中没有命令),然后写的是$HISTFILE文件(如果$HISTFILE得到由运行bash实例截断)。

有时 bash 选择截断$HISTFILE文件,即使histappend选项未设置并$HISFILEZIZE设置为 0。

在这种情况下,nuke 选项始终有效:

history -c; >$HISTFILE
Run Code Online (Sandbox Code Playgroud)

清除内存中记录的命令的历史列表和以前记录到文件的所有命令。这将确保正在运行的 shell 在内存或磁盘中没有记录的历史记录,但是,bash 的其他运行实例(其中历史记录处于活动状态)可能具有从$HISTFILEbash 启动时(或history -r执行a 时)读取的命令的完整副本.

如果要求当前会话的任何其他内容(没有新命令)不会写入历史文件,unset HISTFILE则将阻止任何此类日志记录。

  • 编辑 HISTFILE 并执行 `history -c && History -r` 会将当前历史记录替换为手动修改的历史记录。在某些情况下,这可能比丢弃所有历史记录更好。 (2认同)

Kus*_*nda 9

bash如果 shell 变量HISTFILEbash退出时设置为文件名,则在内存中具有会话历史记录,该会话历史记录将写入文件。

如果您删除 指向的文件HISTFILE,取消设置该变量并退出bash,那么该 shell 会话将不会留下任何持久的历史记录。

未能取消设置HISTFILE变量但删除文件只会清空持久历史,但当前会话的历史将在 shell 退出时保存。

  • 一个`历史-c; history -w` 将清除内存和文件历史记录。仅当不应将进一步的命令记录到历史记录中时才需要取消设置 HISTFILE(不完全是 IMhO 所要求的)。 (3认同)