连接到 byobu 屏幕会话并执行命令?

连接到 byobu 屏幕会话并执行命令?

在我正在构建的脚本中,我正在尝试如何尽可能地实现自动化。更有趣的挑战之一是连接到 byobu 屏幕会话并执行命令。

所以我从明显的地方开始,查看有多少个屏幕会话(游戏在 byobu 有 3 个窗口,lordquackstar 有 2 个。用户位于单独的 putty 实例中)

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 脚本连接到它,有没有办法向它发送命令然后分离?

答案1

您可以直接附加到先前分离的byobu/screen会话,包括窗口:

byobu -r -p2

将重新连接到窗口 2(或指定的窗口)。

-X可以将任何命令发送到byobu/screen会话,并且也可以与-p交换机一起使用。

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

这将发送一个uname -a到第二个(实际上是第三个)byobu 窗口,最后echo发送一个回车符,以便执行命令。

答案2

您可以将命令发送到特定屏幕会话的特定屏幕窗口,而不附加到它。

screen -S sessionname -p windowname -X screencommand

-S会话名称通过启动屏幕或命令时的选项设置sessionname;默认情况下,它byobu与 byobu 一起使用。您还可以在 后使用屏幕 PID -S。您可以使用该命令设置窗口的名称title。您也可以使用窗口号。

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

相关内容