Запустите или отправьте команду на панель tmux в текущем сеансе tmux

Я хочу написать сценарий оболочки, который будет прикреплен к именованному сеансу tmux, выберите окно (или панель) в этом сеансе и запустите команду в этом выбранном окне (или панели).

Как это сделать из сценария bash?

Я знаю

tmux new-window -n:mywindow 'exec something'

позволяет мне отправлять команды в только что созданное окно, но мне нужно что-то вроде

tmux select-window -t:0 'my command'

Я предполагаю, что я мог бы использовать send-keys, но похоже, что должно быть что-то, что принимает команду или список команд, которые запускаются.

41 голос | спросил cjroebuck 24 +04002012-10-24T15:57:01+04:00312012bEurope/MoscowWed, 24 Oct 2012 15:57:01 +0400 2012, 15:57:01

2 ответа


65

Каждая панель tmux является интерфейсом для одного pty (псевдо tty). Неразделяемые окна имеют отдельную панель; разделенные окна имеют несколько окон.

tmux не предоставляет способ добавления дополнительных процессов к панели, как только он был запущен с его начальной командой. Это зависит от процесса начальной команды (обычно это оболочка) для обеспечения управления заданием 1 для этого терминала.

Если вы хотите скрыть все, что в данный момент выполняется на панели, вы можете использовать respawn-pane -k, чтобы убить существующую команду и заменить ее на новый (например, respawn-pane -t sessionname:0.4 -k 'some -new command').

Но если вы хотите сохранить то, что в настоящее время выполняется на панели, тогда не может быть лучшего варианта, который просто «набирает на нем» с помощью send-keys

Вы можете записать это так (приложите последнее, потому что иначе сценарий будет просто ждать, пока вы отделитесь, прежде чем продолжить):

session=whatever
window=${session}:0
pane=${window}.4
tmux send-keys -t "$pane" C-z 'some -new command' Enter
tmux select-pane -t "$pane"
tmux select-window -t "$window"
tmux attach-session -t "$session"

Обратите внимание, что в команде send-keys вы должны набирать буквы E n t e r , чтобы сообщить tmux, чтобы отправить новый ключ в окно. (Естественно, каждая команда заканчивается клавишей Enter .)


1 Управление заданиями - это арбитраж между несколькими группами процессов одного сеанса, который использует tty в качестве управляющего терминала. То есть, клавиша Ctrl + Z и jobs, fg и bg.

ответил Chris Johnsen 25 +04002012-10-25T10:33:42+04:00312012bEurope/MoscowThu, 25 Oct 2012 10:33:42 +0400 2012, 10:33:42
5

Вы можете использовать C-m вместо Enter. Это то же самое. Кроме того, tmux позволяет легко отправить в правую /левую панель с помощью -t right или -t left. И если вы хотите обратиться к панели в другом окне, просто укажите ее номер окна и период, например -t 0.right.

Теперь вы можете написать простую функцию Bash, чтобы получить последовательность ключей в качестве аргумента и легко отправить ее в целевую панель.

ответил Aleksey Gureiev 15 MarpmTue, 15 Mar 2016 21:43:23 +03002016-03-15T21:43:23+03:0009 2016, 21:43:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132