配置 GNU 屏幕,以便将命令历史存储在文件中

use*_*474 3 command-line-interface gnu-screen

我想配置 GNU screen 以便它将所有不同窗口的命令历史存储在不同的文件中。

我知道默认情况下 GNU screen 根本不将命令历史记录(其不同窗口的)存储在文件中(而是将它们存储在内存中),但是可能会告诉它将它们存储在文件中?

不同的命令历史文件应具有名称<session>.<window>.history或类似名称。

有谁知道如何做到这一点?

(明确地说,我希望每个 GNU 屏幕窗口编写不同的文件。我喜欢每个窗口都有不同的历史记录,而且我通常在不同的窗口中运行不同类型的命令。)

Zor*_*che 5

在某处创建一个看起来像这样的脚本。

~/bin/myshell

#!/bin/bash
HISTFILE=~/.bash_history_w$WINDOW
# HISTFILE=~/.bash_history_w${WINDOW}_s${STY##*.}  # with session name.
export HISTFILE
exec /bin/bash
Run Code Online (Sandbox Code Playgroud)

用这样的一行调整你的 .screenrc 。

shell ~/bin/myshell
Run Code Online (Sandbox Code Playgroud)

谢谢,但有一个问题:在我关闭窗口之前,似乎文件实际上并没有被写入。但在我的情况下,窗口将始终处于活动状态并且永远不会关闭。如何在不关闭窗口的情况下触发文件被写入?

您可以通过运行命令手动强制写入history -w。我不相信有任何方法可以让 bash 在退出时自动提交历史记录。不过,在zsh 中似乎有一个选项可以做到这一点,搜索 INC_APPEND_HISTORY。

如果您想要记录每个会话所做的事情,您可以使用脚本。如果您想使用脚本在脚本下创建每个会话+窗口日志,您可以像这样调整 myshell。

#!/bin/bash
SHELL=/bin/bash  # reset the shell back to bash since screen -s will adjust to to myshell
export SHELL
script -a  -q -f ~/.sessionlog_w${WINDOW}_s${STY##*.}
Run Code Online (Sandbox Code Playgroud)