使用 histappend 时 Bash 历史记录丢失

使用 histappend 时 Bash 历史记录丢失

我喜欢保留大量历史记录,因此我已histappend在 中设置.bashrc。大多数时候,一切都运行良好,历史记录由许多 shell 附加而成。但是,偶尔,我会启动一个新 shell 并发现我丢失了整个历史记录 - 而且它通常只包含最后退出的 shell 中的一些命令(即它不仅仅是覆盖而不是附加)。因此,我怀疑它发生在 shell 退出时,而不是来自其他终止文件的进程.bash_history。支持这一结论,我的提示中有历史命令编号,我从未看到它们跳下来。

有人遇到过类似的问题吗?或者有人能给出一些如何解决问题的建议吗?

答案1

抱歉,我只能回答我自己的问题,但是其他答案都无法真正解决这个问题。

我终于明白了,这种情况只发生在关闭gnome-terminal自身时(即文件 > 退出、“x”按钮、alt+F4),而且通常也只发生在快速连续关闭多个终端时。使用 ctrl-D 关闭 shell 并让终端跟随时,这种情况永远不会发生。

如果我能很好地解决它,我会提交一份 gnome-terminal 错误报告。与此同时,也许这会帮助一些从 google 来到这里的人!

答案2

不知道为什么会发生这种情况,但也许您可以通过强制 bash 在每次显示提示时写入其历史文件来解决这个问题:

PROMPT_COMMAND="history -a; history -n"

每次 bash 提示输入下一个命令时,这将写入 (-a) 并重新读取 (-n) 历史记录文件。额外的好处是:您将在 shell 2 的历史记录中获得 shell 1 中的命令 X。

答案3

我的经验是,shell 在退出时更新历史文件。因此,shell 的初始“历史”取决于最近退出的 shell 对历史的看法。

这样做的结果是,您可以从历史记录中获取来来去去的命令,具体取决于其他 shell 的启动和停止方式。

答案4

我以前也见过这种情况,但这是磁盘错误导致的问题,而且这种错误发生的频率越来越高。我会对驱动器进行扫描。如果驱动器没有问题,我会检查这个文件是否没有超过任意的 shell 历史记录限制。

可以采取一些措施来避免这种情况的发生,那就是将文件修剪回 80 行,或者修剪到您想要的历史记录中的命令数量。

相关内容