Połączyć się z sesją ekranową Byobu i wykonać polecenie?

9

W skrypcie, który buduję, eksperymentuję z automatyzacją w jak największym stopniu. Jednym z bardziej interesujących wyzwań jest połączenie się z sesją ekranową Byobu i wykonanie polecenia.

Zacząłem więc w oczywistym miejscu, sprawdzając, ile jest sesji ekranowych (gra ma 3 okna w Byobu, a lordquackstar ma 2. Użytkownicy są w osobnych instancjach szpachli)

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.

Jest tylko jeden, więc sprawdziłem system

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

Nadal nie ma wielu ekranów

Więc na moje pytanie: jak mogę połączyć się z oknem w byobu ze skryptu?


W nieco pokrewnej notatce, czy po połączeniu się ze skryptem bash istnieje jakiś sposób, aby wysłać mu polecenie, a następnie oderwać?

TheLQ
źródło
Wygląda na to, że każdy użytkownik ma jedną sesję ekranu. Nie znam byobu, dlaczego według ciebie jest pięć sesji ekranowych?
Gilles „SO- przestań być zły”
@Gilles Więcej badań wykazało, że dla każdego użytkownika jest tylko jedna sesja ekranowa. Myślałem, że gdzie ich więcej, odkąd htoppokazałem wiele procesów ekranowych
TheLQ

Odpowiedzi:

7

Możesz bezpośrednio dołączyć do wcześniej odłączonej byobu/ screensesji, w tym okno:

byobu -r -p2

ponownie przyłączy się do okna 2 (lub nazwanego).

-Xmoże wysłać dowolne polecenie do sesji byobu/, screena także współpracuje z -pprzełącznikiem.

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

Spowoduje to wysłanie a uname -ado drugiego (faktycznie trzeciego) okna Byobu, echona końcu wysyła znak powrotu karetki, aby polecenia zostały wykonane.

machać
źródło
Możesz po prostu dodać nowy wiersz na końcu ciągu, aby wstawić.
Gilles „SO- przestań być zły”
Co to za „rzeczy”? Usunięcie go powoduje błąd w byobu "-X Nieznane polecenie 'uanme -a'
TheLQ
Robi to, co mówi, „wpycha” polecenie (w tym przypadku uname -a) do byobusesji.
wag
Ach, nie nawiązałem tam połączenia. W każdym razie dzięki za pomoc, działa idealnie!
TheLQ
Wydaje się, że polecenie stuff działa tylko z ekranem GNU, a nie tmux, który ostatnio wydaje się domyślny.
Phil Ricketts,
7

Możesz wysłać polecenie do określonego okna ekranu określonej sesji ekranu bez dołączania się do niego.

screen -S sessionname -p windowname -X screencommand

Nazwa sesji jest ustawiana z -Sopcją przy uruchamianiu ekranu lub sessionnamepolecenia; domyślnie jest to byobubyobu. Możesz także użyć ekranu PID po -S. Możesz ustawić nazwę okna za pomocą titlepolecenia. Możesz także użyć numeru okna.

screen -S byobu -p 1 -X stuff 'ls
'
Gilles „SO- przestań być zły”
źródło
Działa dla mnie, gdy napycham ciąg bez spacji, ale najwyraźniej nic nie robi. Jakieś pomysły?
François Beausoleil
OK, mój zły. Przestrzeń została zinterpretowana lokalnie przez bash, a SSH nie widział pełnego polecenia. Działa teraz!
François Beausoleil