Terhubung ke sesi layar byobu dan jalankan perintah?

9

Dalam skrip yang saya bangun saya sedang bereksperimen dengan cara mengotomatisasi sebanyak mungkin. Salah satu tantangan yang lebih menarik adalah menyambung ke sesi layar byobu dan menjalankan perintah.

Jadi saya mulai di tempat yang jelas, melihat berapa banyak sesi layar yang ada (game memiliki 3 windows di byobu dan lordquackstar memiliki 2. Pengguna berada dalam contoh dempul yang terpisah)

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.

Hanya ada satu di sana, jadi saya memeriksa sistemnya

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

Masih tidak ada banyak layar

Jadi untuk pertanyaan saya: Bagaimana saya bisa terhubung ke jendela di byobu dari skrip?


Pada catatan yang sedikit terkait, begitu saya terhubung ke sana dari skrip bash, apakah ada cara untuk mengirimnya perintah lalu kirim?

TheLQ
sumber
Sepertinya setiap pengguna memiliki sesi layar tunggal. Saya tidak terbiasa dengan byobu, mengapa Anda pikir ada lima sesi layar?
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles Penelitian lebih lanjut menemukan bahwa hanya ada satu sesi layar untuk setiap pengguna. Saya pikir di mana mereka lebih htopmenunjukkan proses layar ganda
TheLQ

Jawaban:

7

Anda dapat langsung melampirkan ke sesi byobu/ terpisah sebelumnya screentermasuk jendela:

byobu -r -p2

akan memasang kembali ke jendela 2 (atau yang bernama).

-Xdapat mengirim perintah apa pun ke byobu/ screensesi dan juga berfungsi dengan -psakelar.

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

Ini akan mengirimkan uname -ajendela byobu ke kedua (ketiga sebenarnya), echopada akhirnya mengirim carriage return sehingga perintah dijalankan.

mengibaskan
sumber
Anda cukup memasukkan baris baru di akhir string ke barang.
Gilles 'SANGAT berhenti menjadi jahat'
"Barang" apa? Menghapusnya memberikan kesalahan dalam byobu "-X Perintah tidak dikenal 'uanme -a'
TheLQ
Itu melakukan apa yang dikatakannya, itu "memasukkan" perintah (dalam hal ini uname -a) ke dalam byobusesi.
Mengibaskan
Ah, tidak membuat koneksi di sana. Bagaimanapun, terima kasih atas bantuannya, ini bekerja dengan sempurna!
TheLQ
Perintah stuff sepertinya hanya berfungsi dengan layar GNU, bukan tmux, yang tampaknya menjadi default belakangan ini.
Phil Ricketts
7

Anda dapat mengirim perintah ke jendela layar tertentu dari sesi layar tertentu tanpa melampirkannya.

screen -S sessionname -p windowname -X screencommand

Nama sesi diatur dengan -Sopsi saat memulai layar atau sessionnameperintah; secara default itu byobudengan byobu. Anda juga dapat menggunakan PID layar setelahnya -S. Anda dapat mengatur nama jendela dengan titleperintah. Anda juga dapat menggunakan nomor jendela.

screen -S byobu -p 1 -X stuff 'ls
'
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Ini bekerja untuk saya ketika saya mengisi string tanpa spasi, tetapi tampaknya tidak melakukan apa-apa. Ada ide?
François Beausoleil
OK, salahku. Ruang itu ditafsirkan oleh bash secara lokal, dan SSH tidak melihat perintah penuh. Sekarang bekerja!
François Beausoleil