use*_*107 5 bash gnu-screen command-history
我连接到屏幕会话。做了一些事情后,我把它拆了。然后在history | tail
我只看到screen -r
和以前的命令而不是在屏幕会话中运行的命令。基本上历史记录在屏幕会话运行时和分离后显示不同的内容。
如何确保屏幕会话中的命令附加到bash
历史记录中?
配置:屏幕 4.0.3,bash 4.1.2
不同的 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...>'