![在分离的 tmux 会话中运行命令并将控制台输出记录到文件](https://linux22.com/image/1453947/%E5%9C%A8%E5%88%86%E7%A6%BB%E7%9A%84%20tmux%20%E4%BC%9A%E8%AF%9D%E4%B8%AD%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4%E5%B9%B6%E5%B0%86%E6%8E%A7%E5%88%B6%E5%8F%B0%E8%BE%93%E5%87%BA%E8%AE%B0%E5%BD%95%E5%88%B0%E6%96%87%E4%BB%B6.png)
我可以在分离的 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'