Connettersi alla sessione schermo byobu ed eseguire il comando?


9

In una sceneggiatura che sto costruendo sto sperimentando come automatizzare il più possibile. Una delle sfide più interessanti è quella di connettersi a una sessione schermo byobu ed eseguire un comando.

Quindi ho iniziato nel posto ovvio, guardando quante sessioni dello schermo ci sono (il gioco ha 3 finestre in byobu e lordquackstar ne ha 2. Gli utenti sono in istanze di stucco separate)

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 lì, quindi ho controllato il 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

Ancora nessuna schermata multipla

Quindi per la mia domanda: come posso collegarmi a una finestra in byobu da uno script?


Su una nota leggermente correlata, una volta che mi collego ad esso da uno script bash, c'è un modo per inviargli un comando e poi catturare?


Sembra che ogni utente abbia una singola sessione dello schermo. Non conosco Byobu, perché pensi che ci siano cinque sessioni sullo schermo?
Gilles 'SO- smetti di essere cattivo'

@Gilles Altre ricerche hanno scoperto che esiste una sola sessione per ogni utente. Ho pensato al loro dove più da allora ha htopmostrato più processi sullo schermo
TheLQ

Risposte:


7

Puoi collegarti direttamente a una sessione byobu/ screensessione precedentemente staccata inclusa la finestra:

byobu -r -p2

si ricollegherà alla finestra 2 (o con un nome).

-Xpuò inviare qualsiasi comando a una byobu/ screensessione e funziona anche con lo -pswitch.

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

Questo invierà uname -aa alla seconda (in realtà la terza) finestra byobu, echoalla fine invia un ritorno a capo in modo che i comandi vengano eseguiti.


Puoi semplicemente includere una nuova riga alla fine della stringa.
Gilles 'SO- smetti di essere cattivo'

Che cos'è "roba"? Rimuovendolo si ottiene l'errore in byobu "-X Comando sconosciuto 'uanme -a'
TheLQ

Fa quello che dice, "inserisce" il comando (in questo caso uname -a) nella byobusessione.
wag

Ah, non ho fatto la connessione lì. Comunque, grazie per l'aiuto, funziona perfettamente!
TheLQ

Il comando stuff sembra funzionare solo con lo schermo GNU, non con tmux, che sembra essere il default di recente.
Phil Ricketts,

7

È possibile inviare un comando a una determinata finestra dello schermo di una determinata sessione dello schermo senza collegarsi ad esso.

screen -S sessionname -p windowname -X screencommand

Il nome della sessione viene impostato con l' -Sopzione all'avvio della schermata o del sessionnamecomando; di default è byobucon byobu. È inoltre possibile utilizzare lo schermo PID dopo -S. È possibile impostare il nome di una finestra con il titlecomando. Puoi anche usare il numero della finestra.

screen -S byobu -p 1 -X stuff 'ls
'

Funziona per me quando riempio una stringa senza spazio, ma a quanto pare non fa nulla. Qualche idea?
François Beausoleil l'

OK, mio ​​male. Lo spazio è stato interpretato da bash localmente e SSH non ha visualizzato il comando completo. Funziona ora!
François Beausoleil,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.