保存 tmux 每日历史记录

Save tmux daily history

提问人:Spiro 提问时间:11/16/2023 更新时间:11/16/2023 访问量:24

问:

我经常会在 tmux 会话中运行几天,我喜欢每天保存我的 bash 历史记录(我使用 logrotate)。除非必要,否则我不会退出 tmux 会话。我是否可以以某种方式在不退出会话的情况下保存当天的 tmux 历史记录,也许每天强制 tmux 在不退出会话的情况下写入.bash_history?

我试过了,但这似乎只保存了最后一个命令?:save-buffer /home/me/tmux-hist.txt

Bash Shell TMUX 历史

评论

0赞 pynexj 11/16/2023
TMUX 历史和 Bash 历史是两个不同的东西。请详细说明您的真实要求。
1赞 Léa Gris 11/16/2023
您的问题更多地涉及其他堆栈站点(如 SuperUser),因为它旨在询问管理控制台工具的高级用法,而不是与代码相关的问题。tmux
0赞 Spiro 11/16/2023
我刚刚意识到 save-buffer 保存的是复制缓冲区,而不是历史缓冲区。如果我在其中一个 tmux 屏幕中执行“历史记录”,我只会得到它的(正确)历史记录,但“cat ~/bash_history”不会产生相同的结果。bash_history在退出会话时写入。此外,每个屏幕/窗格的历史记录缓冲区也不同。我想保存所有窗格中的每日历史记录,而无需退出/关闭会话。
0赞 Spiro 11/16/2023
@LéaGris 通过 cron 作业运行的脚本(或单行代码)难道不符合条件吗?我已经每天在那里运行 logrotate 以节省bash_history。

答:

1赞 Spiro 11/16/2023 #1

不确定这个问题是否适用于这个论坛,但我设法解决了它,所以这是解决方案:

这不是 tmux 问题,而是 shell/bash “问题”。将此添加到 .bashrc:

## Issues with tmux history
# avoid duplicates..
export HISTCONTROL=ignoredups:erasedups
# append history entries:
shopt -s histappend
# After each command, save and reload history:
export PROMPT_COMMAND="history -a; history -n; $PROMPT_COMMAND"

这样,在 tmux 窗口/窗格中运行的命令会立即添加到历史记录中。如果在窗格 1 中运行“echo 1”,然后在窗格 2 中运行“echo 2”,则也会在窗格 2 历史记录中看到“echo 1”。 然后通过 logrotate 保存每日历史记录。