在屏幕会话中自动保存 bash 命令历史记录

在屏幕会话中自动保存 bash 命令历史记录

我连接到屏幕会话。做了一些事情后,我将其分离。然后,history | tail我只看到screen -r以前的命令,而不是屏幕会话中运行的命令。基本上,当屏幕会话运行时和分离后,历史记录会显示不同的内容。

如何确保屏幕会话中的命令附加到bash历史记录中?

配置:屏幕4.0.3,bash 4.1.2

答案1

不同的 shell 在内存中维护自己的历史记录,直到将其刷新(写入)到历史文件中,这通常在退出 shell 时发生,但您可以按如下方式覆盖它:

export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}"

这意味着每次发出新的提示时(即每当您运行命令时),首先将历史记录附加到文件中,然后将其从当前 shell 的内存中清除,然后当前 shell 重新从文件中加载历史记录。

这意味着系统上您帐户的每个 shell,无论是在屏幕中还是在多个窗口中,都会保留并显示来自所有其他 shell 的所有命令历史记录。

将该行放入您的 .bashrc 中,您可能还想通过添加以下内容来增加历史记录大小:

export HISTSIZE=5000

2017 年 11 月 24 日编辑:我刚刚意识到我的 PROMPT_COMMAND 有问题:它引用自身,这意味着如果您重复,它将向变量source .bashrc追加越来越多的副本。history -a; history -n所以,你想做的是这样的:

export PROMPT_COMMAND='history -a; history -n; <whatever other commands you want...>'

相关内容