Запобігати закриванню панелі / вікна, коли команда завершується - tmux


33

У моєму tmux.confфайлі я налаштовував відкривати вікна, називати їх, області налаштування тощо. Тощо.

Однак у мене є одне питання, що якщо одна з панелей запустить команду, скажімо ls, тоді панель закриється після завершення команди (миттєво). Чи є спосіб запобігти такій поведінці? Або вона перетвориться на звичайну оболонку після завершення команди?

Я припускаю, що мені потрібно запустити команду shell -> Execute при запуску панелі, але я буду проклятий, якщо зможу зрозуміти як. Я трохи погукнувся на цю проблему, але прийшов коротко.

Відповіді:


22

У вас є пара варіантів.

  1. Замість запуску lsу вашому вікні запустіть оболонку, а потім надішліть натискання клавіші оболонки на виконання:

    tmux start-server  
    tmux new-session -d -s session  
    tmux new-window -t session:1  
    tmux send-keys -t session:1 ls C-m
    
  2. Ви можете пообідати послідовність команд таким чином, щоб залишити себе командою bash після запуску інших команд:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'ls;bash -i'
    
  3. Дивіться відповідь Jasonwryan для детальної інформації щодо remain-on-exitможливості збереження панелей живими після завершення процесу, щоб ви могли переглянути вихід.

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

    tmux start-server  
    tmux new-session -d
    tmux new-window 'watch -n 60 ls'
    

Спасибі людино! Дивовижна відповідь, номер 2 і номер 4 - це саме те, над чим я працював, але і номер 1 здається чудовою альтернативою. Дякую за всю допомогу, це дуже цінується (ви обоє).
Тушковане

1
Перевага №1 полягає в тому, що команда залишається в історії оболонки і може бути легко виконана. Якщо команда була великою і негарною, то це дуже корисно.
goertzenator

1
Це працює для мене без start-serverкоманди, я думаю, що це запускається автоматично, якщо потрібно. Чи є перевага називати це чітко?
луатор

1
@luator Я думаю, що автозапуск сервера, якщо жоден не знайдений, може бути доданий до tmuxмоменту написання цієї відповіді. Я не знаю жодної переваги, якщо ваша версія породила серверний процес при необхідності.
Калеб

13

Ви можете скористатися remain-on-exitопцією:

залишатися на виїзді [на | вимкнено]
Вікно із цим набором прапорців не знищується, коли програма, що працює в ньому, закривається. Вікно може бути повторно активоване за допомогою команди respawn-window.

Щоб спростити процес повторного панування, можливо, вам потрібно прив’язати його до ключа:

bind-key R respawn-window

Це дозволить вам не залишити мертві вікна при виході програми.


Я туди потрапляв! У мене закінчився час і вирішив, що доведеться редагувати свою відповідь. Так, це третій варіант, головний недолік полягає в тому, що він залишає вікно лише для читання, яке неможливо повторно використовувати без повторного створення.
Калеб

Влучне зауваження. Я оновив (напів-) вирішення.
jasonwryan

Це працює з панелями?
azmeuk

1
встановити це з командного рядка можна за допомогоюtmux set-option remain-on-exit on
rmanna

1
@azmeukset-option -g remain-on-exit on bind-key r respawn-pane
HappyFace

1

Ось розширений приклад використання send-keysметоду, рекомендованого @Caleb

#!/bin/sh
tmux start-server
tmux new-session -d -n 'mywindowname'
tmux send-keys -t mywindowname 'cd notes' Enter 'vim whiteboard/tasks.md' Enter
tmux new-window -d -n 'secondwindowname' # this -d prevents focus from changing to the new window
tmux -2 attach-session -d
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.