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.