我想要配置 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'