¿Conectarse a la sesión de pantalla byobu y ejecutar el comando?

9

En un script que estoy construyendo, estoy experimentando cómo automatizar tanto como sea posible. Uno de los desafíos más interesantes es conectarse a una sesión de pantalla byobu y ejecutar un comando.

Así que comencé en el lugar obvio, mirando cuántas sesiones de pantalla hay (el juego tiene 3 ventanas en byobu y lordquackstar tiene 2. Los usuarios están en instancias de masilla separadas)

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.

Solo uno allí, así que verifiqué el sistema

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

Todavía no hay pantallas múltiples

Entonces, para mi pregunta: ¿cómo puedo conectarme a una ventana en byobu desde un script?


En una nota ligeramente relacionada, una vez que me conecto desde un script bash, ¿hay alguna forma de enviarle un comando y luego desconectarlo?

TheLQ
fuente
Parece que cada usuario tiene una sola sesión de pantalla. No estoy familiarizado con byobu, ¿por qué crees que hay cinco sesiones de pantalla?
Gilles 'SO- deja de ser malvado'
@Gilles Más investigación descubrió que solo hay una sesión de pantalla para cada usuario. Pensé donde más su ya htopmúltiples procesos pantalla mostraba
TheLQ

Respuestas:

7

Puede adjuntar directamente a una sesión byobu/ screensesión previamente separada , incluida la ventana:

byobu -r -p2

se volverá a unir a la ventana 2 (o una con nombre).

-Xpuede enviar cualquier comando a byobu/ screensession y también funciona con el -pmodificador.

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

Esto enviará un uname -aa la segunda (tercera realidad) ventana de byobu, y echoal final envía un retorno de carro para que se ejecuten los comandos.

meneo
fuente
Simplemente puede incluir una nueva línea al final de la cadena para rellenar.
Gilles 'SO- deja de ser malvado'
¿Qué es "cosas"? Eliminarlo da el error en byobu "-X Comando desconocido 'uanme -a'
TheLQ
Hace lo que dice, "mete" el comando (en este caso uname -a) en la byobusesión.
menea el
Ah, no hice la conexión allí. De todos modos, gracias por la ayuda, ¡funciona perfectamente!
TheLQ
El comando cosas solo parece funcionar con la pantalla GNU, no con tmux, que parece ser el predeterminado últimamente.
Phil Ricketts
7

Puede enviar un comando a una ventana de pantalla en particular de una sesión de pantalla en particular sin adjuntarlo.

screen -S sessionname -p windowname -X screencommand

El nombre de la sesión se establece con la -Sopción al iniciar la pantalla o el sessionnamecomando; por defecto es byobucon byobu. También puede usar el PID de la pantalla después -S. Puede establecer el nombre de una ventana con el titlecomando. También puedes usar el número de ventana.

screen -S byobu -p 1 -X stuff 'ls
'
Gilles 'SO- deja de ser malvado'
fuente
Funciona para mí cuando relleno una cadena sin espacio, pero aparentemente no hace nada. ¿Algunas ideas?
François Beausoleil
Ok, mi mal. El espacio fue interpretado por bash localmente, y SSH no estaba viendo el comando completo. Funciona ahora!
François Beausoleil