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.