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ć?


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.


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
'

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.