Чи є еквівалент команди "log" GNU Screen у tmux?


35

Я активно використовую команду "log" екрана, щоб записати висновок сеансу у файл, коли я вношу зміни в заданому середовищі. Я шукав сторінку чоловіка tmux, але не зміг знайти еквівалент. Хтось знає про подібну функцію в tmux, чи мені потрібно писати власні сценарії обгортки для цього?

EDIT: Я знаю "скрипт" та інші утиліти, які дозволяють мені реєструвати сеанс. Причиною того, що функціональність екрана є настільки корисною, є можливість визначити змінну журналу файлів, яка використовує рядкові рядки для унікальної ідентифікації кожного сеансу.

Наприклад, у мене є функція оболонки, яка, даючи ім'я хоста, буде SSH цьому хосту в новому вікні екрана і встановить назву вікна на ім'я хоста. Коли я запускаю журнал цього сеансу, він має префікс із заголовком вікна.

Якщо цієї функції не існує в tmux, мені доведеться створити новий набір оболонок для налаштування "сценаріїв" сеансів, які я хочу зареєструвати. Це не дуже складно, але, можливо, не варто докладати зусиль, якщо екран робить саме те, що мені вже потрібно.

Відповіді:


39

Дозвольте мені побачити, чи правильно я розшифрував вашу конфігурацію екрана :

  • Ви використовуєте щось на зразок logfile "%t-screen.log"(можливо, у .screenrcфайлі) для налаштування імені файлу журналу, який буде запущено пізніше.
  • Ви використовуєте title <hostname>(Ca A) екран команду , щоб задати заголовок нового вікна, або
    ви робите , screen -t <hostname> ssh0 <hostname>щоб почати новий сеанс екрану.
  • Ви використовуєте команду екрана Ca H (Ca: log) для переключення журналу на налаштований файл.

Якщо так, то це майже еквівалентно (потрібно tmux 1.3+ для підтримки #W в pipe-paneкоманді оболонки; pipe-paneдоступно в tmux 1.0+):

  • У файлі конфігурації (наприклад .tmux.conf):

    bind-key H pipe-pane -o "exec cat >>$HOME/'#W-tmux.log'"
    
  • Використовуйте tmux rename-window <hostname>(Cb,) для перейменування наявного вікна або
    використовуйте tmux new-window -n <hostname> 'ssh <hostname>'для запуску нового вікна tmux або
    використовуйте tmux new-session -n <hostname> 'ssh <hostname>'для запуску нового сеансу tmux .
  • Використовуйте Cb H для переключення журналів.

Немає повідомлень про те, що журнал переглянуто, але ви можете додати його, якщо хочете:

bind-key H pipe-pane -o "exec cat >>$HOME/'#W-tmux.log'" \; display-message 'Toggled logging to $HOME/#W-tmux.log'

Примітка. Вищенаведений рядок відображається як би у файлі конфігурації ( .tmux.confабо ви, або один source). tmux повинен бачити як зворотний кут і крапку з комою; якщо ви хочете налаштувати це з оболонки (наприклад tmux bind-key …), вам доведеться бігти або цитувати обидва символи належним чином, щоб вони були доставлені в tmux неушкодженими. Здається, не існує зручного способу показу різних повідомлень для включення / вимкнення, коли використовується лише одна прив'язка (можливо, ви зможете щось сфальсифікувати if-shell, але це, мабуть, було б неприємно). Якщо дві прив'язки прийнятні, спробуйте це:

bind-key H pipe-pane "exec cat >>$HOME/'#W-tmux.log'" \; display-message 'Started logging to $HOME/#W-tmux.log'
bind-key h pipe-pane \; display-message 'Ended logging to $HOME/#W-tmux.log'

Приємно! Це виглядає, щоб зробити дуже багато саме того, що мені потрібно.
Муралі Суріар

Hrrm. Тому спроба зробити це з оболонки викликає деякі проблеми. Будь-які пропозиції щодо того, як керувати передачею всієї лінії до tmux неушкодженими? "
Murali Suriar

2
@KamilDziedzic: Ви можете спробувати включити tmux pipe-pane …команду у свій default-command(тобто перед запуском оболонки); Звичайно, це буде працювати лише для панелей "за замовчуванням" (нічого не починається з явних команд, наприклад new-window sqlite3). З'явилися підказки, що підтримка “гачок” може потрапити в деяку майбутню версію tmux ; це може дозволити вам налаштувати команду (наприклад pipe-pane …) , які будуть автоматично запускатися після якої - небудь іншої команди new-session, new-windowабо split-pane).
Кріс Джонсен

1
@sebelk: Якщо ви вважаєте, що окремий рядок є "записом", ви можете скористатися оболонкою readі dateдомовитись про це. Напр.bind-key H pipe-pane -o 'exec bash -c "while IFS= read -r line; do echo \"\$(date +%%Y%%m%%dT%%H%%M%%SZ%%z): \$line\"; done" >>$HOME/"#W-tmux.log"'
Кріс Джонсен

1
@ChrisJohnsen, ... це могло б зробити набагато ефективнішим, якби ми знали, що баш - 4.1 або новіший - нерестування непрограшного пакета для запуску нової копії dateдля кожного рядка виходу буде серйозним хітом! Набагато краще printf '%(%Y%m%dT%H%M%S)T: %s\n' "$line"(уникаючи необхідності для включення у файл конфігурації tmux, таким чином, імовірно, подвоєння %sта уникнення "s).
Чарльз Даффі

5

Ось плагін tmux, який дозволяє вести журнал, не псуючи ключові прив’язки .tmux.conf:

https://github.com/tmux-plugins/tmux-logging

Особливості:

  • prefix + Pперемикає ведення журналів на панелі. Виведення очищено від небажаних символів ANSI!
  • prefix + Alt + P зберігає повну історію панелей у файл

4

Переглянувши документацію на tmux, я не можу знайти жодного еквівалента журналу вікон екрана. Схоже, вам доведеться використовувати функції оболонки, щоб робити те, що вам завгодно, або просто використовувати екран. Ви можете ввімкнути налагодження, яке реєструє як сервер, так і клієнтську сторону, але воно також включає безліч сторонніх журналів, пов’язаних з tmux, так що це не буде точно тим, що ви просите.

Ви, можливо, можете використовувати буфер обміну tmux для автоматизації збереження буфера на інший сеанс, який буде налаштовано на прийняття вмісту буфера обміну та збереження у файл. Це схоже на хакі.


1
Це був і мій висновок. Наразі я вирішив дотримуватися екрана, що шкода, оскільки крім цього нагляду, tmux здається приємним.
Муралі Суріар

1

Я роблю це за допомогою скрипту, це з мого файлу tmux.conf

bind ^C new-window "script -f /home/jcosta/mydocs/work/logs/$(date '+%d%m%Y_%H%M%S')_$$.log"
bind c new-window "script -f /home/jcosta/mydocs/work/logs/$( date '+%d%m%Y_%H%M%S')_$$.log"
bind | split-window "script -f /home/jcosta/mydocs/work/logs/$(date '+%d%m%Y_%H%M%S')_$$.log"

1
Погана заміна logкоманди екрана , яка дозволяє вести логін в режимі льоту. Але тоді, якщо ви перебуваєте в tmux і хочете використовувати реєстрацію екрана, вам все одно потрібно запустити нову оболонку.
Арседж
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.