Подключиться к сеансу экрана byobu и выполнить команду?

9

В сценарии, который я создаю, я экспериментирую с тем, как максимально автоматизировать. Одна из наиболее интересных задач - подключиться к экранному сеансу byobu и выполнить команду.

Итак, я начал с очевидного места, посмотрев, сколько там сеансов экрана (в игре 3 окна в бёбу, а в lordquackstar 2. Пользователи находятся в отдельных экземплярах замазок)

game@quackgame:~$ screen -ls
There is a screen on:
        2019.byobu      (01/05/2011 05:10:04 PM)        (Attached)
1 Socket in /var/run/screen/S-game.

Там только один, поэтому я проверил систему

lordquackstar@quackgame:/home/game$ sudo ls -lAR /var/run/screen/
/var/run/screen/:
total 0
drwx------ 2 game          users         100 2011-01-06 09:18 S-game
drwx------ 2 lordquackstar lordquackstar 100 2011-01-06 09:17 S-lordquackstar

/var/run/screen/S-game:
total 4
prwx------ 1 game users 0 2011-01-08 07:55 2019.byobu
-rw------- 1 game users 0 2011-01-06 09:18 byobu-exchange
-rw-r--r-- 1 game users 3 2011-01-08 07:32 byobu.updates-available

/var/run/screen/S-lordquackstar:
total 4
prwx------ 1 lordquackstar lordquackstar 0 2011-01-08 07:42 1169.byobu
-rw------- 1 lordquackstar lordquackstar 0 2011-01-06 09:17 byobu-exchange
-rw-r--r-- 1 lordquackstar lordquackstar 3 2011-01-08 07:35 byobu.updates-available

Все еще нет нескольких экранов

Итак, на мой вопрос: как я могу подключиться к окну в бёбу из скрипта?


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

TheLQ
источник
Похоже, что у каждого пользователя есть один сеанс экрана. Я не знаком с byobu, почему вы думаете, что есть пять сеансов экрана?
Жиль "ТАК - перестань быть злым"
@ Жиль В ходе дополнительных исследований выяснилось, что для каждого пользователя существует только один сеанс экрана. Я думал, что их больше, так как htopпоказал несколько экранных процессов
TheLQ

Ответы:

7

Вы можете напрямую подключиться к ранее удаленные byobu/ screenсессии , включая окно:

byobu -r -p2

подключится к окну 2 (или именованному).

-X может отправить любую команду byobu / screenсеанс, а также работает с -pкоммутатором.

byobu -p2 -X stuff "uname -a $(echo -ne '\r')"

Это отправит uname -aвторое (на самом деле третье) окно byobu, а echoв конце отправляет возврат каретки, чтобы команды выполнялись.

шутник
источник
Вы можете просто включить новую строку в конце строки, чтобы заполнить.
Жиль "ТАК ... перестать быть злым"
Что такое "вещи"? Удаление этого дает ошибку в byobu "-X Неизвестная команда 'uanme -a'
TheLQ
Он делает то, что говорит, он «вставляет» команду (в данном случае uname -a) в byobuсеанс.
вилять
Ах, не установил связь там. В любом случае, спасибо за помощь, все работает отлично!
TheLQ
Кажется, что команда stuff работает только с экраном GNU, а не с tmux, который в последнее время используется по умолчанию.
Фил Рикеттс
7

Вы можете отправить команду конкретному экранному окну определенного экранного сеанса, не подключаясь к нему.

screen -S sessionname -p windowname -X screencommand

Имя сеанса задается с помощью -Sопции при запуске экрана или sessionnameкоманды; по умолчанию это byobuс бёбу. Вы также можете использовать экран PID после -S. Вы можете установить имя окна с помощью titleкоманды. Вы также можете использовать номер окна.

screen -S byobu -p 1 -X stuff 'ls
'
Жиль "ТАК - перестань быть злым"
источник
Это работает для меня, когда я набиваю строку без пробела, но, очевидно, ничего не делает. Любые идеи?
Франсуа Босолей
Ок мой плохой Пространство было интерпретировано Bash локально, и SSH не видел команду полностью. Работает сейчас
Франсуа Босолей