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 é conectar-se a uma sessão de tela do byobu e executar um comando.

Então 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 de massa 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 lá, 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 a minha pergunta: como conectar-me a uma janela no byobu a partir de um script?


Em uma nota um pouco relacionada, uma vez que eu me conecto a ele a partir de um script bash, existe alguma maneira de enviar um comando para ele e então removê-lo?

TheLQ
fonte
Parece que cada usuário tem uma única sessão de tela. Eu não estou familiarizado com byobu, por que você acha que existem cinco sessões de tela?
Gilles 'SO- stop be evil' (
@Gilles Mais pesquisas descobriram que há apenas uma sessão de tela para cada usuário. Eu pensei que a sua, onde mais uma vez htopos processos de tela múltipla mostrou
TheLQ

Respostas:

7

Você pode anexar diretamente a uma sessão byobu/ desanexação anteriormente screen, incluindo a janela:

byobu -r -p2

recolocará na janela 2 (ou em uma nomeada).

-Xpode enviar qualquer comando para uma sessão byobu/ screene também funciona com o -pswitch.

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

Isso enviará uma uname -apara a segunda (terceira na verdade) janela do byobu, e echono final envia um retorno de carro para que os comandos sejam executados.

abanar
fonte
Você pode simplesmente incluir uma nova linha no final da string para coisas.
Gilles 'SO- stop be evil' (
O que é "coisas"? Removê-lo dá o erro no byobu "-X Comando desconhecido 'uanme -a'
TheLQ
Ele faz o que diz, "enche" o comando (neste caso uname -a) na byobusessão.
wag
Ah, não fiz a conexão lá. Enfim, obrigado pela ajuda, ele funciona perfeitamente!
TheLQ
O comando stuff parece funcionar apenas com a tela GNU, não com o tmux, que parece ser o padrão recentemente.
Phil Ricketts
7

Você pode enviar um comando para uma janela de tela específica de uma sessão de tela específica sem anexar a ela.

screen -S sessionname -p windowname -X screencommand

O nome da sessão é definido com a -Sopção ao iniciar a tela ou o sessionnamecomando; por padrão é byobucom byobu. Você também pode usar a tela PID depois -S. Você pode definir o nome de uma janela com o titlecomando Você também pode usar o número da janela.

screen -S byobu -p 1 -X stuff 'ls
'
Gilles 'SO- parar de ser mau'
fonte
Funciona para mim quando enfio uma corda sem espaço, mas aparentemente não faz nada. Alguma ideia?
François Beausoleil
OK, meu mal. O espaço foi interpretado pelo bash localmente, e o SSH não estava vendo o comando completo. Funciona agora!
François Beausoleil