Підключитися до екранного сеансу byobu та виконати команду?


9

У сценарії, який я будую, я експериментую, як максимально автоматизувати. Однією з найцікавіших завдань є підключення до сеансу на екрані byobu та виконання команди.

Тож я почав у очевидному місці, дивлячись на скільки екранових сеансів (у грі є 3 вікна в byobu, а 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

Досі немає декількох екранів

Отже, для мого питання: Як я можу підключитися до вікна в byobu зі сценарію?


Що стосується трохи пов’язаної примітки, як тільки я підключаюсь до нього за допомогою скрипту bash, чи є спосіб відправити йому команду, а потім від'єднати?


Схоже, кожен користувач має сеанс на одному екрані. Я не знайомий з byobu, чому ви думаєте, що п’ять сесійних сесій?
Жил "ТАК - перестань бути злим"

@Gilles Додаткові дослідження з’ясували, що для кожного користувача є лише один екранний сеанс. Я думав, що їх більше, тому що htopпоказали кілька процесів на екрані
TheLQ

Відповіді:


7

Ви можете безпосередньо приєднатися до раніше відключеного byobu/ screenсеансу, включаючи вікно:

byobu -r -p2

повторно приєднається до вікна 2 (або названого).

-Xможе надіслати будь-яку команду до byobu/ screenсесії, а також працює з -pкомутатором.

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

Це відправить a uname -aу друге (третє насправді) вікно byobu, echoв кінці посилає повернення каретки, щоб команди виконувались.


Ви можете просто включити новий рядок в кінці рядка для наповнення.
Жил 'ТАК - перестань бути злим'

Що "речі"? Вилучивши його, виникає помилка в byobu "-X Невідома команда" uanme -a "
TheLQ

Він робить те, що каже, "забиває" команду (в даному випадку uname -a) в byobuсеанс.
вів

Ах, не зв’язувався там. У будь-якому випадку, дякую за допомогу, це прекрасно працює!
TheLQ

Команда речі працює лише з екраном GNU, а не з tmux, який, здається, останнім часом є типовим.
Філ Рікеттс

7

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

screen -S sessionname -p windowname -X screencommand

Назва сеансу встановлюється -Sпараметром при запуску екрана або sessionnameкоманди; за замовчуванням це byobuз byobu. Ви також можете використовувати екран PID після -S. Ви можете встановити ім'я вікна за допомогою titleкоманди. Ви також можете використовувати номер вікна.

screen -S byobu -p 1 -X stuff 'ls
'

Це працює для мене, коли я набиваю рядок без місця, але, мабуть, нічого не робить. Будь-які ідеї?
Франсуа Бозолей

Гаразд, моя погана. Космос інтерпретувався bash локально, і SSH не бачив повноцінної команди. Працює зараз!
Франсуа Бозолей
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.