LINUX.ORG.RU

Одновременное выполнение команд в нескольких терминалах

 


1

1

Привет!

Есть необходимость в сабже - есть у меня, например, 3 окна терминала, в которых я залогинен на разных удаленных хостах. Мне нужно на все три машины одновременно отправить какую-то команду, причем мне нужно видеть результат ее выполнения «в реальном времени» - например открыть top в этих терминалах, так что циклом пробежаться по хостам и подобное не подойдет.

Видел ClusterSSH и PAC, но оба они не подходят - тут чтоб выполнить команду на нескольких хостах нужно сначала объединить их в кластер, что очень не удобно. В этом плане мне очень нравится как реализовано в xshell в оффтопе - открыто у тебя в окне 3 вкладки с терминалами, снизу бар - набрал там команду и она во всех вкладках выполнилась, никаких кластеров городить не нужно.

В общем, просьба помочь советом. Если есть такой функционал в tmux, то это будет еще лучше, а так все равно, будет ли это какой-то ssh-клиент или просто эмулятор терминала с такой функциональностью.

★★★★★
Ответ на: комментарий от Minoru

Я так понимаю только в одной «вкладке» работает (то есть можно разделить окно на несколько панелей, тогда будет работать, а с несколькими «вкладками» - нет).

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от JK

Да, это то, что нужно, спасибо!

Пока вопрос актуален, вдруг будут еще варианты.

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

Да это работает в пределах одного окна(в терминах tmux). Но никто же не мешает панели(в терминах tmux), например собрать в одно окно или раскидать потом по разным окнам или даже сессиям.

Belkrr
()

Используй терминатор, там можешь назначить каждой вкладке тег и отправлять команды определенным группам.

trofk ★★★
()
Ответ на: комментарий от ValdikSS

Да в общем то нет проблемы, просто не очень удобно - при учете того что вкладок может быть десяток на каждой по три клика это уже много.

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от Belkrr

Даже пару панелей в одном окне не очень удобно использовать в некоторых случаях, а если нужно десяток? Плюс, опять же, собирать-разбирать.

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от trofk

О, класс, спасибо! Можно даже окна не группировать. Похоже то, что нужно!

alozovskoy ★★★★★
() автор топика

Есть необходимость в сабже - есть у меня, например, 3 окна терминала,

что то мне подсказвает, что тебе надо групповое управление серверами?

MikeDM ★★★★★
()
Ответ на: комментарий от ValdikSS

А если группы нет (хосты из разных групп или вообще не сгруппированы)? Или нужны не все хосты из группы?

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от MikeDM

Нет, такие средства у меня уже есть, но для «интерактивных» команд (в кавычках потому что это может быть открытие лога во всех нужных вкладках или, например, top'а) это не подходит.

alozovskoy ★★★★★
() автор топика
user@host $ inotifywait -e open /tmp/trig ; ./run_script1

user@host $ inotifywait -e open /tmp/trig ; ./run_script2

user@host $ touch /tmp/trig

вместо inotifywait можешь забубенить костыль на while, sleep и test

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)

Нашел отличное решение - чтоб в tmux выполнить команду во всех окнах отдельной сессии добавляем в ~/.tmux.conf

bind C-e command-prompt -p "session?,message?" "run-shell \"tmux list-windows -t %1 \| cut -d: -f1\|xargs -I\{\} tmux send-keys -t %1:\{\} %2 enter\""

(Для вызова нажимаем (по дефолту) Ctrl+b, b отпускаем ctrl держим, нажимаем e).

Tmux спросит номер сессии, затем команду, и отправит это в окна указанной сессии. Если убрать enter то текст команды просто отобразится во всех окнах, отправки «enter'а» не будет.

alozovskoy ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.