Запустіть або відправте команду на tmux-панель у поточному сеансі tmux


47

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

Як це зробити зі сценарію bash?

я знаю

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

дозволяє відправляти команди на щойно створене вікно, але мені потрібно щось подібне

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

Думаю, я міг би скористатися send-keys але здається, що має бути щось, що приймає команду або список команд, які виконуються.

Відповіді:


68

Кожен 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 команд оболонки.


1
Дякуємо за це! я кладу #{session_name}:#{window_index}.#{pane_index} у моєму рядку стану, щоб я швидко побачив, на яку панель надсилати команди.
a paid nerd

6

Можна використовувати C-m замість Enter. Це те ж саме. Також, tmux дозволяє легко відправляти на праву / ліву панель за допомогою -t right або -t left. І якщо ви хочете звернутися до панелі в іншому вікні, просто приставте його до номера вікна і періоду, наприклад -t 0.right.

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

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