在我正在构建的脚本中,我正在尝试如何尽可能地实现自动化。更有趣的挑战之一是连接到 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
'