Se connecter à la session d'écran byobu et exécuter la commande?


9

Dans un script que je construis, j'expérimente comment automatiser autant que possible. L'un des défis les plus intéressants est de se connecter à une session d'écran byobu et d'exécuter une commande.

J'ai donc commencé dans un endroit évident, en regardant le nombre de sessions d'écran (le jeu a 3 fenêtres dans byobu et lordquackstar en a 2. Les utilisateurs sont dans des instances de mastic distinctes)

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.

Un seul là-bas, j'ai donc vérifié le système

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

Toujours pas d'écrans multiples

Donc pour ma question: comment puis-je me connecter à une fenêtre dans byobu à partir d'un script?


Sur une note légèrement liée, une fois que je me suis connecté à partir d'un script bash, existe-t-il un moyen de lui envoyer une commande puis de la détacher?


Il semble que chaque utilisateur ait une seule session d'écran. Je ne connais pas byobu, pourquoi pensez-vous qu'il y a cinq sessions d'écran?
— Gilles 'SO- arrête d'être méchant'

@Gilles Plus de recherches ont révélé qu'il n'y a qu'une seule session d'écran pour chaque utilisateur. Je pensais que leur où plus depuis a htopmontré plusieurs processus d'écran
— TheLQ

Réponses:


7

Vous pouvez directement attacher à une session byobu/ screensession précédemment détachée , y compris la fenêtre:

byobu -r -p2

se rattachera à la fenêtre 2 (ou à une fenêtre nommée).

-Xpeut envoyer n'importe quelle commande à une session byobu/ screenet fonctionne également avec le -pcommutateur.

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

Cela enverra une uname -aà la deuxième (troisième en fait) fenêtre byobu, echola fin envoie un retour chariot afin que les commandes soient exécutées.


Vous pouvez simplement inclure une nouvelle ligne à la fin de la chaîne à remplir.
— Gilles 'SO- arrête d'être méchant'

Quel est "truc"? Le supprimer donne l'erreur dans byobu "-X Commande inconnue 'uanme -a'
— TheLQ

Il fait ce qu'il dit, il "bourre" la commande (dans ce cas uname -a) dans la byobusession.
— remuer le

Ah, n'a pas fait le lien là-bas. Quoi qu'il en soit, merci pour l'aide, cela fonctionne parfaitement!
— TheLQ

La commande stuff ne semble fonctionner qu'avec l'écran GNU, pas tmux, qui semble être la valeur par défaut ces derniers temps.
— Phil Ricketts

7

Vous pouvez envoyer une commande à une fenêtre d'écran particulière d'une session d'écran particulière sans y attacher.

screen -S sessionname -p windowname -X screencommand

Le nom de la session est défini avec l' -Soption lors du démarrage de l'écran ou de la sessionnamecommande; par défaut c'est byobuavec byobu. Vous pouvez également utiliser l'écran PID après -S. Vous pouvez définir le nom d'une fenêtre avec la titlecommande. Vous pouvez également utiliser le numéro de fenêtre.

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

Cela fonctionne pour moi lorsque je bourre une chaîne sans espace, mais ne fait apparemment rien. Des idées?
— François Beausoleil

OK, ma mauvaise. L'espace a été interprété par bash localement et SSH ne voyait pas la commande complète. Fonctionne maintenant!
— François Beausoleil
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.