Чи можу я побачити, що відбувається під час сеансу tmux, не додаючи його?


16

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

Чи є спосіб просто побачити короткий знімок того, що відбувається в сесії, не повністю приєднуючись? Я шукаю щось подібне теоретично робити tailна сеансі, щоб отримати останній біт виводу (але якщо я можу уникнути створення іншого файлу з копією виводу, тим краще)

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

Відповіді:


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

Можна також додати -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)

гарна ідея. Я все ще плутаюсь, $lrpхоча - це та змінна, яку ви згадали? чи можете ви навести приклад того, як це було б використано? не бачив у $lrpспискуman tmux
cwd

@cwd Це просто заповнювач вашого процесу (скажімо, rsyncбудь-що інше) ... :)
jasonwryan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.