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

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

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

tmux new -d 'while true; do date; sleep 1; done'

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

tmux new 'while true; do date; sleep 1; done' \; pipe-pane 'bzip2 > /tmp/log.bz2'

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

tmux new -d 'while true; do date; sleep 1; done' \; pipe-pane 'bzip2 > /tmp/log.bz2'

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

tmux new 'while true; do date; sleep 1; done'  pipe-pane 'bzip2 > /tmp/log.bz2' \; detach

这可以工作,但是之后会在控制台上打印以下乱码:

^[[?62;9;c

正确的做法是什么?

答案1

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

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

从这个版本开始,以下工作不再需要奇怪的字符:

tmux new -d 'while true; do date; sleep 1; done' \; pipe-pane 'cat > /tmp/log'

所以基本上这肯定是旧版本的问题。我不知道哪个版本修正了这个问题/功能,但我知道 2.2 版很好用。

请注意,日志将包含一些控制字符。例如,退出 while 循环时会显示 ^C。


我知道这是一个老问题,但由于这是谷歌搜索时相当高的结果tmux 分离日志记录我也遇到了同样的问题,我想不妨将我的解决方案留在这里,以便任何可以帮助的人都能得到帮助。

答案2

您可以在独立的 tmux 会话中运行脚本,并将 stdout 和 stderr 记录到文件中,如下所示:

tmux new -d 'script.sh |& tee tmux.log'

相关内容