Verbindung zur Byobu-Bildschirmsitzung herstellen und Befehl ausführen?

9

In einem Skript, das ich erstelle, experimentiere ich damit, wie ich so viel wie möglich automatisieren kann. Eine der interessanteren Herausforderungen besteht darin, eine Verbindung zu einer Byobu-Bildschirmsitzung herzustellen und einen Befehl auszuführen.

Also habe ich an der offensichtlichen Stelle angefangen und mir angesehen, wie viele Bildschirmsitzungen es gibt (das Spiel hat 3 Fenster in Byobu und Lordquackstar hat 2. Die Benutzer befinden sich in separaten Kittinstanzen).

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.

Nur eine da, also habe ich nach dem System gesucht

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

Immer noch keine mehreren Bildschirme

Also für meine Frage: Wie kann ich über ein Skript eine Verbindung zu einem Fenster in byobu herstellen?


Gibt es eine Möglichkeit, nach dem Herstellen einer Verbindung über ein Bash-Skript einen Befehl zu senden und dann zu lösen?

TheLQ
quelle
Es sieht so aus, als hätte jeder Benutzer eine einzelne Bildschirmsitzung. Ich kenne Byobu nicht. Warum gibt es Ihrer Meinung nach fünf Bildschirmsitzungen?
Gilles 'SO - hör auf böse zu sein'
@ Gilles Weitere Untersuchungen haben ergeben, dass es für jeden Benutzer nur eine Bildschirmsitzung gibt. Ich dachte, dass sie mehr seitdem htopmehrere Bildschirmprozesse zeigten
TheLQ

Antworten:

7

Sie können direkt auf eine zuvor freistehend befestigen byobu/ screenSitzung mit dem Fenster:

byobu -r -p2

wird wieder in Fenster 2 (oder ein benanntes) eingefügt.

-Xkann jeden Befehl an eine byobu/ screensession senden und funktioniert auch mit dem -pSwitch.

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

Dies sendet ein uname -aan das zweite (tatsächlich dritte) Byobu-Fenster, das echoam Ende einen Wagenrücklauf sendet, damit die Befehle ausgeführt werden.

wedeln
quelle
Sie können einfach eine neue Zeile am Ende der Zeichenfolge einfügen.
Gilles 'SO - hör auf böse zu sein'
Was ist "Zeug"? Das Entfernen gibt den Fehler in byobu "-X Unbekannter Befehl 'uanme -a'
TheLQ
Es macht das, was es sagt, es "stopft" den Befehl (in diesem Fall uname -a) in die byobuSitzung.
wag
Ah, habe dort keine Verbindung hergestellt. Trotzdem, danke für die Hilfe, es funktioniert perfekt!
TheLQ
Der Befehl stuff scheint nur mit dem GNU-Bildschirm zu funktionieren, nicht mit tmux, was in letzter Zeit die Standardeinstellung zu sein scheint.
Phil Ricketts
7

Sie können einen Befehl an ein bestimmtes Bildschirmfenster einer bestimmten Bildschirmsitzung senden, ohne ihn anzuhängen.

screen -S sessionname -p windowname -X screencommand

Der Sitzungsname wird mit der -SOption beim Startbildschirm oder dem sessionnameBefehl festgelegt. Standardmäßig ist es byobumit Byobu. Sie können auch die Bildschirm-PID nach verwenden -S. Mit dem titleBefehl können Sie den Namen eines Fensters festlegen . Sie können auch die Fensternummer verwenden.

screen -S byobu -p 1 -X stuff 'ls
'
Gilles 'SO - hör auf böse zu sein'
quelle
Es funktioniert für mich, wenn ich einen String ohne Leerzeichen stopfe, aber anscheinend nichts mache. Irgendwelche Ideen?
François Beausoleil
OK, mein schlechtes. Das Leerzeichen wurde von bash lokal interpretiert, und SSH sah nicht den vollständigen Befehl. Funktioniert jetzt!
François Beausoleil