Tôi đang làm việc để tự động hóa một thói quen bảo trì liên quan đến việc bắt đầu và dừng một tập lệnh đang chạy trong một phiên màn hình. Cách tiếp cận của tôi là giết phiên màn hình, sau đó khởi động lại nó và chạy lệnh từ trong tập lệnh bằng cách sử dụng các khả năng để tạo màn hình và truyền lệnh mà không cần phải gắn vào màn hình.
Tuy nhiên, tôi đang gặp khó khăn với điều này. Tôi có thể tạo màn hình chính xác mà không cần gắn nó bằng cách sử dụng screen -d -m -S screen_name
. Tuy nhiên, nếu tôi chạy một lệnh dựa trên:
screen -S screen_name-X stuff "command 1"'echo -ne '\015''"command 2"'echo -ne '\015''
với tiếng vang -ne '\ 015' được bao bọc bằng backticks thay vì dấu ngoặc đơn. Nó là để mô phỏng người dùng nhấn phím enter vì các lệnh tôi sử dụng đang di chuyển đến một thư mục và thực thi một tập lệnh nằm ở đó. Lệnh này hoạt động, nhưng chỉ khi màn hình đã được gắn vào khi nó được tạo. Khi tôi đang cố gắng tự động hóa quá trình tạo màn hình và chạy các lệnh bên trong nó, tôi muốn tránh phải đính kèm và tách ra trong một tập lệnh. Tôi sẽ thử đề xuất tạo tập lệnh shell chứa các lệnh tôi cần thực thi trong màn hình và chỉnh sửa theo kết quả của mình.
Có cách nào để tạo màn hình và chạy lệnh trong màn hình trong một lệnh hoặc không phải gắn vào màn hình sau khi tạo nhưng trước khi thực hiện lệnh?
Cảm ơn trước.
** Cập nhật - đã thử đề xuất đặt các lệnh tôi cần thực thi trong tập lệnh shell Tôi đã có thể tạo thành công màn hình và thực hiện các lệnh từ bên trong màn hình, nhưng tôi nhận được hành vi khi tập lệnh dừng chạy màn hình cũng đóng lại Đây không phải là một vấn đề vì tập lệnh là tập lệnh ghi nhật ký chỉ dừng lại với kiến thức của quản trị viên hệ thống hoặc thông qua tập lệnh tôi đang cố gắng phát triển, tuy nhiên, tốt hơn là nên thiết lập màn hình theo cách mà màn hình hiển thị không biến mất nếu tập lệnh bị dừng. Có thể đạt được hành vi này? **
.screenrc
có chứa dòng zombie kr
, nó sẽ giữ cho cửa sổ hoàn thành mở và bạn có thể nhấn k
để đóng winodw hoặc r
chạy lại lệnh trong cửa sổ. Tôi có cái này cho .screenrc mặc định của tôi.