我不小心在命令行上输入了密码,需要清除 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 文件中
导出 HISTFILESIZE=0
导出 HISTSIZE=0
这些也可以在您的登录 shell 中手动输入,并且具有相同的效果。
答案3
我在编辑注销时也遇到了问题(我制作了一个备份脚本,将我的数据备份到服务器)。我发现这个链接很有帮助,但它适用于 ubuntu。
https://askubuntu.com/questions/293312/execute-a-script-upon-logout-reboot-shutdown-in-ubuntu