关于~/.bash_history工作机制的一些困惑

关于~/.bash_history工作机制的一些困惑

当我在多个终端上工作时,我对 ~/.bash_history 中的内容感到困惑。它如何在不同终端中保存历史记录?

答案1

默认情况下,历史文件仅在启动时读取,仅在退出时写入。因此,如果您同时启动多个 shell,则只会保留最后一个 shell 退出时的历史记录。其余生成的历史记录将被覆盖。

您可以通过多种方法调整此行为。一种是添加shopt -s histappend到您的 .bashrc 中。此选项将导致历史文件在 shell 退出时被追加而不是被覆盖。

您可以通过让 bash 在每个命令后执行附加操作来进一步调整此行为,方法是将以下内容添加到:PROMPT_COMMAND中的环境变量中。这会导致每次打印提示时运行该命令。.bashrcexport PROMPT_COMMAND="history -a;"history -a

当使用上述两项调整时,无论打开了多少个 shell,bash 历史记录文件都会不断地被每个 shell 附加到后面。需要注意的是,每个 shell 都看不到其他 shell 运行的命令,因为历史文件仅在启动时读取。您可以尝试通过调用手动将这些条目读取到 shell 当前历史记录中history -n,但在不断附加多个 shell 的情况下这样做时,我发现了一些奇怪的情况。如果您尝试将其自动化并且非常关心您的历史,请务必小心。

相关内容