Могу ли я увидеть, что происходит в сеансе tmux, не подключаясь к нему?

16

Часто я использую, tmuxчтобы запустить задачу, которая будет выполняться некоторое время. Я буду периодически возвращаться и проверять его, используя, tmux -aа затем отключаться, если он все еще не завершен, и проверять позже.

Есть ли способ просто увидеть краткий снимок того, что происходит в сеансе, без полного присоединения? Я ищу что-то вроде теоретического выполнения tailв сеансе, чтобы получить последний бит вывода (но если я могу избежать создания другого файла с копией вывода, тем лучше)

Может быть, присоединение и немедленное отсоединение тоже подойдут. Я пытаюсь сохранить нажатия клавиш, возможно , такая команда может выполняться удаленно,
то есть ssh root@server tmux --tail?

УХО
источник

Ответы:

17

Я думаю, что capture-paneможет удовлетворить ваши потребности:

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

(см. «target-pane» на странице man, чтобы узнать, как указать панель)

По умолчанию эта команда выводит текущее содержимое указанной панели. Вы можете указать диапазон строк, используя -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
Вы действительно владеете этим тегом ... Отличный ответ (как обычно).
Джейсонвриан
Можно также добавить -eдля экранирования ANSI (цвет и т. Д.). Это делает для хорошей мнемонической-pet
летающие овцы
1

На самом деле, нет. Один подход, который приходит на ум, - это запустить долго выполняющийся процесс ( $lrp), а затем периодически, без повторного подключения, запускать list-windowsдля соответствующего сеанса.

В какой-то момент имя окна tmux с $ lrp изменится на значение по умолчанию, обычно ваша оболочка, и вы сможете увидеть, что $ 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)
jasonwryan
источник
хорошая идея. Я все еще смущен, $lrpхотя - это переменная, которую вы упомянули? Можете ли вы привести пример того, как это будет использоваться? не видел в $lrpспискеman tmux
cwd
@cwd Это просто заполнитель для вашего процесса (скажем, rsyncчто угодно) ... :)
jasonwryan