Tôi muốn khởi chạy một số ứng dụng bên trong phiên màn hình nhưng từ một kịch bản.
Nếu không có script tôi sẽ chỉ khởi chạy màn hình, sau đó mở N windows bằng crtl-ac và thực thi các chương trình trong mỗi cửa sổ.
Tôi đã thử như sau
screen -d -m -S test
screen -S test -X exec tail -f /var/log/messages
screen -S test -X screen
screen -S test -X exec tail -f /var/log/xinetd.log
Nhưng khi tôi đính kèm thì đuôi phiên không chạy. Nếu tôi đính kèm phiên ngay sau đó screen -d -m -S startup
và chạy screen -S startup -X exec tail -f /var/log/messages
từ thiết bị đầu cuối khác thì nó hoạt động.
Tôi đã bỏ lỡ một cái gì đó?
Chỉnh sửa sau khi AlexD trả lời:
Một giải pháp làm việc một nửa là
screen -d -m -S test tail -f /var/log/messages
screen -S test -X screen tail -f /var/log/xinetd.log
Lệnh màn hình chuỗi (lệnh sau -X) với lệnh đang hoạt động trong khi exec không có thể vì exec thực hiện một cửa sổ hiện tại được xác định trong khi không có cửa sổ hiện tại khi màn hình bị tách ra. Cảm ơn AlexD cho lời khuyên này.
Nhưng có một tác dụng phụ kỳ lạ: khi chương trình dừng lại (nếu bạn đính kèm phiên màn hình và crtl-c đuôi, hoặc giết đuôi), cửa sổ màn hình sẽ đóng lại.
Vì vậy, hành vi không giống như Crtl-A c và chạy lệnh
Một tác dụng phụ khác là bạn không thể xâu chuỗi 2 lệnh
screen
luôn luôn chấm dứt khi lệnh được khởi chạy kết thúc - đó là một tính năng bình thường của công cụ :) .. vì vậy nếu bạn chạyscreen top
, khi bạn thoáttop
,screen
cũng sẽ thoát