如何使 Bash 刷新命令历史记录以便将其清除?

如何使 Bash 刷新命令历史记录以便将其清除?

我不小心在命令行上输入了密码,需要清除 Bash shell 历史记录。这对于 来说很容易echo "" > ~/.bash_history

我将同样的内容添加到我的.bash_logout以防万一。但是,当我在注销/登录后检查历史记录时,我输入的最后一个命令仍然存在于历史记录文件中。更准确地说,存在两个命令:我输入的最后一个命令和exit注销时的命令。

如何让 Bash 将命令历史记录刷新到文件中,以便我可以在注销时清除它?

答案1

Bash 不会将其历史记录写入历史文件,直到它退出或您显式调用history -w.因此,如果您刚刚将密码添加到当前 shell 的历史记录中,.bash_history那么它还没有被写入,它只是位于内存中。您可以运行fc -l以查看最近命令的列表,然后history -d删除条目。

$ 回声旗鱼
旗鱼
哎呀,那是我的密码!
$ fc -l -2
第1234章
1235 回声旗鱼
$ 历史 -d 1235
$ fc -l -3
第1234章
第1235章
1236 历史 -d 1236

如果您已经编写了历史文件(例如,因为您有history -w调试PROMPT_COMMAND陷阱),则执行此操作并进行编辑.bash_history

如果您想完全忘记当前 shell 的历史记录,请取消设置HISTFILE并确保它在 shell 退出之前保持未设置状态。如果您想忘记到目前为止的当前历史记录但开始录制,您可以调用history -c。如果您想忘记除最后 3 个历史条目之外的所有历史条目,请设置HISTFILE=3然后(在单独的命令行上)将其设置回您通常的值。

答案2

bash 的手册页提供了两个很好的解决方案......可以将其放入您的 .*rc 文件中

  1. 导出 HISTFILESIZE=0

  2. 导出 HISTSIZE=0

这些也可以在您的登录 shell 中手动输入,并且具有相同的效果。

答案3

我在编辑注销时也遇到了问题(我制作了一个备份脚本,将我的数据备份到服务器)。我发现这个链接很有帮助,但它适用于 ubuntu。

https://askubuntu.com/questions/293312/execute-a-script-upon-logout-reboot-shutdown-in-ubuntu

相关内容