配置 GNU screen 以便它将命令历史记录存储在文件中

配置 GNU screen 以便它将命令历史记录存储在文件中

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

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

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

有人知道该怎么做吗?

(只是为了清楚起见,我希望每个 GNU 屏幕窗口写入不同的文件。我喜欢每个窗口都有不同的历史记录,并且我通常在不同的窗口中运行不同类型的命令。)

答案1

在某处创建一个如下所示的脚本。

〜/ bin / myshell

#!/bin/bash
HISTFILE=~/.bash_history_w$WINDOW
# HISTFILE=~/.bash_history_w${WINDOW}_s${STY##*.}  # with session name.
export HISTFILE
exec /bin/bash

使用如下行调整你的 .screenrc。

shell ~/bin/myshell

谢谢,但有一个问题:似乎直到我关闭窗口时文件才真正被写入。但就我而言,窗口将始终处于活动状态且永远不会关闭。我如何才能在不关闭窗口的情况下触发文件写入?

您可以通过运行命令 手动强制写入history -w。我认为除了退出时,没有其他方法可以让 bash 自动提交历史记录。似乎有一个选项可以做到这一点但是,搜索 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##*.}

答案2

Shell 历史和screen历史记录是两码事。Shell 会记住你输入的命令,而screen会记住所有内容:你输入的命令它们的输出(甚至是提示)。

如果您想保留历史记录,screen则可以使用其日志记录功能。在末尾~/.screenrc添加以下命令:

screen
screen $SHELL -c 'screen -X logfile "/tmp/$STY.%n.history"; screen -p 0 -X deflog on; screen -p 0 -X log on'

相关内容