Conecte-se à sessão de tela byobu e execute o comando?

9

Em um script que estou construindo, estou experimentando como automatizar o máximo possível. Um dos desafios mais interessantes é se conectar a uma sessão de tela byobu e executar um comando.

Então eu comecei no lugar óbvio, olhando quantas sessões de tela existem (o jogo tem 3 janelas no byobu e o lordquackstar tem 2. Os usuários estão em instâncias 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.

Apenas um aí, então eu verifiquei o 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

Ainda não há várias telas

Então, para minha pergunta: Como posso me conectar a uma janela no byobu de um script?

Em uma nota um pouco relacionada, depois que eu me conecto a ele a partir de um script bash, existe alguma maneira de enviar um comando e, em seguida, separar?

    
por TheLQ 08.01.2011 / 14:18

2 respostas

7

Você pode se conectar diretamente a uma sessão byobu / screen desanexada anteriormente, incluindo a janela:

byobu -r -p2

será reconectado na janela 2 (ou em um nome).

-X pode enviar qualquer comando para uma sessão byobu / screen e também funciona com a opção -p .

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

Isso enviará um uname -a para a segunda (terceira na verdade) janela byobu, o echo no final envia um retorno de carro para que os comandos sejam executados.

    
por 08.01.2011 / 15:02
7

Você pode enviar um comando para uma janela de tela particular de uma sessão de tela específica sem anexá-lo a ela.

screen -S sessionname -p windowname -X screencommand

O nome da sessão é definido com a opção -S ao iniciar a tela ou o comando sessionname ; por padrão, é byobu com byobu. Você também pode usar a tela PID após -S . Você pode definir o nome de uma janela com o comando title . Você também pode usar o número da janela.

screen -S byobu -p 1 -X stuff 'ls
'
    
por 08.01.2011 / 15:03