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


7

我可以在分离的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

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


您可能需要在要求tmux执行的特定命令中将管道包含到管道窗格中。我对tmux并不是很熟悉,但我会先忽略管道窗格,然后让常规输出重定向工作,然后进入tmux,然后添加管道魔法。一步一步来。还要注意哪个shell看到了什么命令行(你可能需要双重转义)。此外,tee可能是你的朋友,同时搞清楚这一切。
2015年

Answers:


5

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

在使用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就像魅力一样。

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


我知道这是一个古老的问题,但是因为这在谷歌寻找tmux分离式日志记录时是一个相当高的结果,我遇到了同样的问题,并且可能会把我的解决方案留给任何可以帮助它的人。


0

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

tmux new -d 'script.sh |& tee tmux.log'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.