Kết nối với phiên màn hình byobu và thực hiện lệnh?


9

Trong một kịch bản tôi đang xây dựng, tôi đang thử nghiệm cách tự động hóa càng nhiều càng tốt. Một trong những thử thách thú vị hơn là kết nối với phiên màn hình byobu và thực thi lệnh.

Vì vậy, tôi bắt đầu ở một nơi rõ ràng, xem xét có bao nhiêu phiên màn hình (trò chơi có 3 cửa sổ trong byobu và lordquackstar có 2. Người dùng ở trong các trường hợp putty riêng biệt)

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.

Chỉ có một ở đó, vì vậy tôi đã kiểm tra hệ thống

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

Vẫn không có nhiều màn hình

Vì vậy, đối với câu hỏi của tôi: Làm thế nào tôi có thể kết nối với một cửa sổ trong byobu từ một tập lệnh?


Trên một lưu ý hơi liên quan, một khi tôi kết nối với nó từ một tập lệnh bash, có cách nào để gửi cho nó một lệnh sau đó hủy bỏ không?


Có vẻ như mỗi người dùng có một phiên màn hình duy nhất. Tôi không quen thuộc với byobu, tại sao bạn nghĩ có năm phiên màn hình?
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Nghiên cứu thêm phát hiện ra rằng chỉ có một phiên màn hình cho mỗi người dùng. Tôi nghĩ nơi của họ nhiều hơn kể từ khi htophiển thị nhiều quy trình màn hình
TheLQ

Câu trả lời:


7

Bạn có thể trực tiếp đính kèm vào một phiên byobu/ tách ra trước đó screenbao gồm cả cửa sổ:

byobu -r -p2

sẽ gắn lại vào cửa sổ 2 (hoặc một cái tên).

-Xcó thể gửi bất kỳ lệnh nào đến byobu/ screensession và cũng hoạt động với -pswitch.

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

Điều này sẽ gửi một uname -acửa sổ byobu thứ hai (thứ ba thực sự), echoở cuối sẽ gửi trả lại vận chuyển để các lệnh được thực thi.


Bạn chỉ có thể bao gồm một dòng mới ở cuối chuỗi để nhồi.
Gilles 'SO- ngừng trở nên xấu xa'

"Công cụ" là gì? Việc xóa nó sẽ gây ra lỗi trong byobu "-X Lệnh không xác định 'uanme -a'
TheLQ

Nó thực hiện những gì nó nói, nó "nhét" lệnh (trong trường hợp này uname -a) vào byobuphiên.
vẫy

Ah, đã không thực hiện kết nối ở đó. Dù sao, nhờ sự giúp đỡ, nó hoạt động hoàn hảo!
TheLQ

Lệnh Stuff dường như chỉ hoạt động với màn hình GNU, không phải tmux, dường như là mặc định gần đây.
Phil Ricketts

7

Bạn có thể gửi lệnh đến một cửa sổ màn hình cụ thể của một phiên màn hình cụ thể mà không cần đính kèm.

screen -S sessionname -p windowname -X screencommand

Tên phiên được đặt với -Stùy chọn khi màn hình bắt đầu hoặc sessionnamelệnh; theo mặc định đó là byobubyobu. Bạn cũng có thể sử dụng màn hình PID sau -S. Bạn có thể đặt tên của một cửa sổ bằng titlelệnh. Bạn cũng có thể sử dụng số cửa sổ.

screen -S byobu -p 1 -X stuff 'ls
'

Nó hoạt động với tôi khi tôi nhồi một chuỗi không có khoảng trống, nhưng dường như không làm gì cả. Có ý kiến ​​gì không?
François Beausoleil

OK, xấu của tôi. Không gian được giải thích bằng bash cục bộ và SSH không nhìn thấy lệnh đầy đủ. Hoạt động ngay!
François Beausoleil
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.