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

The*_*eLQ 9 bash gnu-screen byobu

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

所以我从明显的地方开始,查看有多少屏幕会话(游戏在 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.
Run Code Online (Sandbox Code Playgroud)

只有一个,所以我检查了系统

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
Run Code Online (Sandbox Code Playgroud)

仍然没有多个屏幕

所以对于我的问题:如何从脚本连接到 byobu 中的窗口?


在稍微相关的说明中,一旦我从 bash 脚本连接到它,有没有办法向它发送命令然后分离?

wag*_*wag 7

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

byobu -r -p2
Run Code Online (Sandbox Code Playgroud)

将重新连接到窗口 2(或已命名的窗口)。

-X可以向byobu/screen会话发送任何命令,也可以与-p开关配合使用。

byobu -p2 -X stuff "uname -a $(echo -ne '\r')"
Run Code Online (Sandbox Code Playgroud)

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


Gil*_*il' 7

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

screen -S sessionname -p windowname -X screencommand
Run Code Online (Sandbox Code Playgroud)

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

screen -S byobu -p 1 -X stuff 'ls
'
Run Code Online (Sandbox Code Playgroud)