在分离的 tmux 会话中运行命令并将控制台输出记录到文件

Ed *_*Man 13 tmux

我可以在分离的 tmux 会话中运行命令:

tmux new -d 'while true; do date; sleep 1; done'
Run Code Online (Sandbox Code Playgroud)

我可以在附加的 tmux 会话中运行命令并使用以下命令记录控制台输出:

tmux new 'while true; do date; sleep 1; done' \; pipe-pane 'bzip2 > /tmp/log.bz2'
Run Code Online (Sandbox Code Playgroud)

但是如何在分离的 tmux 会话中运行命令并记录控制台输出?以下在分离的 tmux 会话中运行命令,但无法记录输出:

tmux new -d 'while true; do date; sleep 1; done' \; pipe-pane 'bzip2 > /tmp/log.bz2'
Run Code Online (Sandbox Code Playgroud)

我能够得到的最接近的是以下内容,它在非分离的 tmux 中启动命令,开始记录,然后分离:

tmux new 'while true; do date; sleep 1; done'  pipe-pane 'bzip2 > /tmp/log.bz2' \; detach
Run Code Online (Sandbox Code Playgroud)

这有效,但在以下之后会在控制台上打印以下乱码:

^[[?62;9;c
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

小智 9

希望现在你已经找到了这个奇怪的答案。这是我发现的:

在使用 tmux 1.8(centos 7 上的默认设置)时,我遇到了与您相同的问题。因此,我删除了该版本并从 tmux 的源版本 2.2 编译。

从这个版本开始,以下工作没有奇怪的字符:

tmux new -d 'while true; do date; sleep 1; done' \; pipe-pane 'cat > /tmp/log'
Run Code Online (Sandbox Code Playgroud)

所以基本上它一定是旧版本的问题。我不知道哪个版本更正了问题/功能,但我知道 2.2 就像一个魅力。

请注意,日志将包含一些控制字符。像 ^C 一样,退出 while 循环时。


我知道这是一个老问题,但由于在寻找tmux 分离日志记录时,这是一个相当高的结果,我遇到了同样的问题,我认为最好将我的解决方案留在这里给任何可以帮助它的人。