GNU screen 丢失(部分)命令历史记录

GNU screen 丢失(部分)命令历史记录

我使用GNU screen5 个不同的会话,每个会话都存储了自己的命令历史记录。但我经常在历史记录中找不到某个命令,尽管我确信几周前我在当前会话中使用过该命令。

似乎历史记录大小有硬性限制?我该如何将其设置为无穷大?

相关问题:我如何控制会话历史记录的存储位置?通常,我们的系统管理员会重新启动计算机,然后我会丢失所有会话,而我不得不这样做,screen -wipe因为会话已损坏。然后,所有历史记录都消失了。 :( 在这种情况下,我想找到存储的历史记录并将它们绑定到新创建的会话中。

PS:我bash在所有屏幕会话中使用它。

更新:我不是在问如何统一会话历史记录。我只是希望每个会话都有无限的历史记录,并且如果旧会话损坏或删除,我希望能够将该历史记录“加载”到新会话中。

更新2:你可能已经明白了:当我说GNU screen在 5 个不同的会话中使用我实际上指的是GNU screen包含 5 个不同窗口的会话。抱歉。

答案1

最好使用 Bash 的历史记录,而不是 screen 的。Screen 会保留一个回滚缓冲区(可能在内存中而不是文件中)。当您使用Ctrl-调用命令时,a {它实际上是在挖掘屏幕上出现的所有内容,这些内容仍然在缓冲区中,看起来像是跟在提示符后面。实际上没有命令历史记录。顺便说一下,您可以使用screen -h numdefscrollback num或screen 命令增加回滚缓冲区的大小。scrollback num

您可以使用沃伦建议保持 Bash 历史记录最新。或者您可以使用我在 Bash 上找到的日志记录函数之一这里它可以保存您的 IP 地址或屏幕会话 ID 以及日期、时间、当前工作目录和实际命令。我自己一直都在使用它。您可能必须将$hcmntextra我的函数使用的变量设置为包含,$STY以便屏幕会话名称也会被记录下来。

答案2

我之前在 SU 上问过类似的问题:https://superuser.com/questions/37576/can-history-files-be-unified-in-

引用已接受的回答


您需要做两件事:

在 .bashrc 中插入命令shopt -shistappend。这会将命令附加到历史文件,而不是覆盖它。
此外,在 中.bashrc插入,PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"每次 bash 显示提示时,历史文件都会被重写和重读。


另请参阅history 手册页

答案3

我对这个问题的首选解决方案是前面某个答案的变体。

我喜欢为每个屏幕会话/窗口组合存储一个单独的文件,并且每次显示其相应的提示时都会附加每个文件:

if [[ "$STY" = "" ]]; then STY="none"; fi
if [[ "$WINDOW" = "" ]]; then WINDOW="none"; fi
export HISTFILE=~/.bash_history.$STY.$WINDOW;


PROMPT_COMMAND="$PROMPT_COMMAND; history -a"

这将创建以下历史文件:

.bash_history.none.none
.bash_history.2756.pts-9.linux.0
.bash_history.2756.pts-9.linux.1
.bash_history.2881.pts-9.linux.0

如果您希望窗口 {x} 始终使用其自己的历史文件,但无论屏幕会话如何都使用相同的文件,那么您只需省略 STY 变量:

if [[ "$WINDOW" = "" ]]; then WINDOW="none"; fi
export HISTFILE=~/.bash_history.$WINDOW;


PROMPT_COMMAND="$PROMPT_COMMAND; history -a"

这将创建以下历史文件:

.bash_history.none
.bash_history.0
.bash_history.1
.bash_history.2

答案4

每个窗口的命令历史记录都保存在每个 bash 会话的内存中。您必须让 bash 写入不同的历史记录文件,才能让它们保留下来并保持独立,就像您要求的那样。

您可以通过设置HISTFILE每个屏幕会话来做到这一点。我想象在启动文件中执行此操作的方式如下:

if [[ "$WINDOW" != "" ]] ; then export HISTFILE=~/.bash_history.$WINDOW ; fi

请注意,这并不能解决当您的 shell 因重启而终止时更新历史文件的问题。

相关内容