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

use*_*107 5 bash gnu-screen command-history

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

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

配置:屏幕 4.0.3,bash 4.1.2

Mic*_*nez 7

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

export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}"
Run Code Online (Sandbox Code Playgroud)

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

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

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

export HISTSIZE=5000
Run Code Online (Sandbox Code Playgroud)

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

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