В Экран, как мне отправить команду во все окна виртуального терминала в течение одного сеанса экрана?
Я знаю, как создавать несколько окон в течение одного сеанса экрана при запуске:
Но как только я их запускаю и запускаю, есть ли способ, которым мой вход может быть отправлен во все открытые окна, а не только в текущий момент?
Ответы
Ответ 1
Я нашел хороший учебник для этого:
http://blog.cone.be/2009/11/24/gnu-screen-nethack-different-screen-windows-sending-commands-to-all-screen-windows/
Из сообщения:
Как только вы повторно используете несколько окон, вы можете столкнуться с ситуацией, когда вы хотите отправить одну и ту же команду нескольким из этих открытых окон. Экран обеспечивает команду "at" для этого. Сначала вам нужно открыть режим командной строки.
C-a: (двоеточие) Войдите в режим командной строки.
Таким образом вы можете ввести команду один раз, но вам все равно придется вводить каждое отдельное окно. Но есть лучший способ. В качестве примера мы отправим "ls -l" во все окна.
в элементе "#" "ls -l ^ M"
Эта команда едва читаема, поэтому отпустите ее! Первая часть - 'at [identifier] [# | * |%] command'. Команда at отправляет текстовый параметр во все окна, указанные вами в идентификаторе. Вы можете сопоставить критерии с именем окна или номером С#, именем пользователя с * или дисплеями, используя%. Следующая часть - это команда, которую вы хотите запустить в выбранных окнах. Использовали "материал" для заполнения команды, которую мы хотим выполнить, в буфер ввода выбранных окон. Материал действительно прост. Он просто заполняет строку, которую вы дали в качестве параметра. Следующая проблема - это команда. Или, скорее, это выполнено! Чтобы получить экран для ввода "enter" после команды, для выполнения команды добавьте "^ M" в конце. Вы можете сделать намного больше, чем просто отправить ls на вход. Любая команда экрана, например переименование, перемещение окон вокруг, то, что.. доступно в сочетании с "at".
Ответ 2
Извините за этот запоздалый ответ, но tmux
может быть лучшим выбором для вас, чем screen
. В tmux
вам нужно нажать: C-b :
, чтобы войти в командный режим и ввести: setw synchronize-panes
(или просто setw sync<Tab>
с использованием автозаполнения). Обратите внимание, что эта команда включает синхронизацию между панелями (области одного разделенного экрана, видимые одновременно), но не между окнами (полный, не разделенный, экраны).
Ответ 3
Вы также можете отправить только выбранные окна (многоадресная рассылка).
- Конвенция. Дайте 1-му символу заголовка окна значение широковещательного флага. Например. если название начинается с "." то окно прослушивает трансляцию, иначе это не так.
-
Установите заголовки по мере необходимости.
screen -S SessionName -p 0 -X title "remote_0" # window 0: ignore multicast
screen -S SessionName -p 1 -X title ".remote_1" # window 1: listen to multicast
-
Отправить содержимое слушателям с помощью команды на экране
screen -S SessionName -X at ".#" stuff "date
"
-
Примечание: приведенная выше двойная кавычка обеспечивает отправку ^ M (Cr).
-
Вы можете включить/отключить многоадресную рассылку на основе заголовка окна таким образом.