Làm thế nào để đưa đầu ra bên trong `screen` ra một tập lệnh?


33

Tôi có một screencá thể đang chạy và tôi sẽ cần phải thực thi một số mã bên trong screenvà lấy kết quả ra kịch bản của mình.

Phần đầu tiên khá dễ dàng, tôi chỉ screen -S session_name -X eval 'stuff "$cmd"\015'.
(Tôi đã sửa đổi một dòng tôi tìm thấy trong một tập lệnh )

Phần thứ hai, nhận được đầu ra, là khó khăn hơn. Làm thế nào tôi có thể có được toàn bộ đầu ra, bất kể kích thước của nó là gì?



Cảm ơn :) Liên kết thứ hai đã được giải thích tại sao lệnh đầu tiên phải là stuff, đó là điều tôi gặp khó khăn trong việc hiểu.
1

Câu trả lời:


29

Bạn có thể bắt đầu screenvới -Ltùy chọn. Điều này sẽ khiến màn hình tạo một tệp screenlog.n(phần n là số, bắt đầu bằng 0) trong thư mục làm việc hiện tại.

Trong trường hợp của bạn, nó sẽ trông giống như: screen -S session_name -L -X eval 'stuff "$cmd"\015'

Miễn là bạn nhớ dọn dẹp sau đó, điều này sẽ phù hợp với những gì bạn đang theo đuổi.

Đối với dòng cuối cùng của nhật ký, có thể dễ dàng lấy được tail -1 screenlog.0hoặc toàn bộ nhật ký có thể được phân tích cú pháp theo cách bạn muốn.


Mặc dù vậy, có một điều: screenlệnh tôi đưa ra chỉ là gửi lệnh. Để bắt đầu screen, tôi đã sử dụng screen -dmS name program;-)
1

22

Một sắc thái nữa có thể hữu ích trong tương lai: Nếu bạn đang ở trong một phiên màn hình, bạn có thể tương tác yêu cầu tệp nhật ký được tạo. Nhấn ctrl- a H(Control-A theo sau là chữ H) để yêu cầu màn hình bắt đầu bỏ bất kỳ cửa sổ nào bạn đang truy cập vào tệp nhật ký.


5
Không biết có phải vì phiên bản mới hơn không, nhưng theo tôi man screen, tôi phải gõ CA H, không có Điều khiển cho H. Chỉ buồn, rằng điều này không nắm bắt được nhật ký trước đó.
Matmarbon

2
Bạn đúng! Đó là CA H để tạo một tệp nhật ký. Xin lưu ý rằng đó là chữ H (chữ thường h chỉ tạo ra bản cứng của màn hình hiện tại).
rickumali

3
Vui lòng cập nhật câu trả lời cho CA H. Những người tìm kiếm trong tương lai có thể bị đánh lừa và bỏ lỡ câu trả lời đúng.
gc5

Có ai biết một cách để gửi lệnh thông qua một kịch bản? Như trong điều khiển gửi + a và sau đó H sau một giây.
Zach W.
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.