我可以在不附加的情况下查看tmux会话中发生了什么吗?


16

我经常会tmux用来启动一个会运行一段时间的任务。我将定期返回并使用对其进行检查tmux -a,然后断开连接,如果它仍未完成,请稍后再检查。

有没有办法在不完全附加的情况下仅查看会话中发生的情况的简要快照?我正在寻找类似理论上tail在会话上进行操作以获取输出的最后一部分的方法(但如果我可以避免使用输出副本更好地创建另一个文件的话)

也许附加并立即将其分离也会起作用。我正在尝试保存击键,也许这样的命令可以远程执行,
ssh root@server tmux --tail

Answers:


17

我认为capture-pane可能适合您的需求:

tmux capture-pane -pt "$target-pane"

(有关指定窗格的方法,请参见手册页中的“目标窗格”)

默认情况下,该命令将转储指定窗格的当前内容。您可以使用-S-E选项(开始和结束行号)来指定行范围:第一行是0,负号是指窗格“回滚”历史记录中的行。因此,添加将-S -10获得最新的十行历史记录以及窗格的当前内容。

tmux capture-pane -pt "$target-pane" -S -10

-p选项已在1.8中添加。如果运行的是早期版本,则可以执行以下操作:

tmux capture-pane -t "$target_pane" \; save-buffer - \; delete-buffer

但是请注意那些分号,如果您通过以下方式发出此命令,ssh因为远程外壳程序将添加额外的外壳程序解释级别(分号必须作为参数传递给最终的tmux命令,它们不能由本地或远程解释贝壳)。


1
您确实拥有此标签...很好的答案(照常)。
jasonwryan

也可以添加-eANSI转义(颜色等)。这使它成为了一个不错的助记符-pet
飞羊

1

并不是的。我想到的一种方法是开始长时间运行的进程($lrp),然后定期运行(无需重新连接)list-windows相关会话。

有时,带有$ lrp的tmux窗口的名称将更改回默认值,通常是您的shell,您将可以看到$ lrp已完成。

┌─[Veles ~]
└─╼ tmux list-windows -t 0
0: App1  (1 panes) [142x51] [layout b27d,142x51,0,0,0] @0
1: SSH  (1 panes) [142x51] [layout b27e,142x51,0,0,1] @1
2: IRC  (1 panes) [142x51] [layout b27f,142x51,0,0,2] @2
3: Shell- (1 panes) [142x51] [layout b280,142x51,0,0,3] @3
4: $lrp* (1 panes) [142x51] [layout b281,142x51,0,0,4] @4 (active)
┌─[Veles ~]
└─╼ tmux list-windows -t 0
0: App1  (1 panes) [142x51] [layout b27d,142x51,0,0,0] @0
1: SSH  (1 panes) [142x51] [layout b27e,142x51,0,0,1] @1
2: IRC  (1 panes) [142x51] [layout b27f,142x51,0,0,2] @2
3: Shell- (1 panes) [142x51] [layout b280,142x51,0,0,3] @3
4: bash* (1 panes) [142x51] [layout b281,142x51,0,0,4] @4 (active)

好主意。我仍然对此感到困惑$lrp-您提到的是一个变量吗?您能举一个如何使用它的例子吗?没有看到$lrp中列出man tmux
CWD

@cwd这只是您的过程的一个占位符(比如说rsync或其他)... :)
jasonwryan 2014年
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.