3

У screen GNU есть команда at , которая позволяет вам управлять другими сессиями, отправляя им команды экрана . У tmux есть что-то подобное? Я пробовал send-prefix и send-keys , но они посылали ключи процессу, запущенному внутри tmux; Вы не можете использовать их для управления самим tmux.

Попытка отправить управляющую команду, выполнив что-то вроде этого:

send-keys -t main:1 "tmux select-window -t :1" ENTER

не работает, если внутренний процесс является чем-то отличным от оболочки. И это также дает сбой, если вы отправляете ключи из связанного сеанса, даже если внутренний процесс является оболочкой. (В этом случае ваш текущий сеанс затронут.)

1 ответ1

2

Хотя это и необязательно, спецификатор целевого окна, который принимают оконные команды tmux (то есть для их параметров -t и -s ), может напрямую указывать окно в любом сеансе. Синтаксис для целевого окна работает следующим образом:

  • сессия : окно где
    • сессия
      • спецификатор для клиента (указывает текущий сеанс этого клиента), или
      • точное, префиксное или fnmatch (3) (то есть «глоб») совпадение для имени сеанса, и
    • окно
      • индекс окна или
      • точный префикс или fnmatch (3) для имени окна в сеансе.
  • окно (только если в спецификаторе нет двоеточия) где
    • окно , как указано выше, за исключением того, что оно ограничено текущим сеансом.

Вторая форма, вероятно, является наиболее часто используемой формой, но, похоже, вам нужна первая форма в вашем случае.

Вы должны быть в состоянии выполнить эту команду:

tmux select-window -t main:1

из любой точки мира, чтобы достичь своей цели. Например, он будет работать из сценария оболочки, который выполняется полностью вне контекста сеанса tmux (например, через cron)- при условии, что вы предоставляете любые значения опций -L или -S tmux не по умолчанию, чтобы команда могла найти сокет сервера.

Вы также можете сделать это в качестве привязки (например , в ~/.tmux.conf файл или на : быстроты; отрегулировать ключевой спецификатор по желанию):

bind-key C-m select-window -t main:1

Затем вы можете ввести свой префикс и Cm в любом клиенте, подключенном к любому сеансу на любом сервере, имеющем эту привязку, и он переключит сеанс, соответствующий main в свое окно с индексом 1.


Синтаксис «спецификатора цели» описан в разделе «Команды» справочной страницы tmux (найдите первое вхождение target-client , target-session , target-window или target-pane чтобы найти соответствующие описания).

Я никогда не использовал экран at команде, но, похоже, у него есть итерационные функции. В настоящее время нет прямого соответствия этому в tmux, но «сценарий» должен быть довольно простым путем анализа выходных данных list-clients , list-sessions , list-windows и list-panes (более новые версии tmux имеют -F опция для этих команд, которые могут помочь генерировать вывод, который легче анализировать).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .