¿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?


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.


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
'

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.