Lưu trạng thái phiên màn hình GNU hoàn chỉnh


32

Có thể duy trì "trạng thái" của cửa sổ màn hình GNU (hoặc chỉ là một vỏ tiêu chuẩn) để tôi có thể tải lại mọi thứ sau khi khởi động lại:

  • Số lượng vỏ mở
  • Tên của mỗi vỏ
  • Thư mục hiện tại của mỗi shell
  • Lịch sử của mỗi vỏ
  • Nếu có thể, các biến môi trường của chúng

Câu trả lời:


19

Không thực sự có thể lưu một phiên màn hình hoàn chỉnh.

Những gì bạn có thể làm là tạo ra một thứ phù hợp .screenrcsẽ thiết lập một số thứ sau khi bạn khởi động lại hệ thống của mình.

Dưới đây là một số ý kiến ​​cho những điều bạn liệt kê:

  • Số lượng vỏ mở
  • Tên của mỗi vỏ
  • Thư mục hiện tại của mỗi shell

Tôi sử dụng một cái gì đó như thế này .screenrcđể mở một số shell cụ thể khi khởi động:

## set the default shell
shell                   zsh

# screens
screen -t 'zsh'
screen -t 'mutt' mutt
screen -t 'zsh' /home/user/bin/scriptToRun
[..]

Bạn sẽ nhận được chuỗi giữa '' làm tên cửa sổ và lệnh sau tên sẽ được thực thi trên shell mặc định của bạn. Bao gồm bất kỳ tập lệnh nào bạn muốn, ví dụ thay đổi trong một thư mục cụ thể và mở một số nhật ký.

  • Lịch sử của mỗi vỏ

Bạn đã bao giờ nghĩ về việc chia sẻ lịch sử của các shell trong các phiên của bạn chưa? IMHO điều này làm cho mọi thứ dễ dàng hơn nhiều. Trong ZSH của nó thực hiện với setopt SHARE_HISTORYtrong của bạn.zshrc

  • Nếu có thể, các biến môi trường của chúng

Nếu bạn thực sự cần điều này và không muốn bất kỳ sự đánh đổi nào, bạn có thể nghĩ về tập lệnh shell, đọc ra trạng thái hiện tại của màn hình, lưu số lượng shell, biến môi trường, v.v. và đưa thông tin này vào tập lệnh khởi động được gọi bởi của bạn .screenrc. Đối với tôi điều này sẽ không đáng nỗ lực vì tôi đánh giá cao một môi trường sạch sau khi khởi động lại, nếu tôi có thể tùy chỉnh các cửa sổ mặc định cho màn hình.


Cảm ơn lời đề nghị của bạn. Tôi đã tìm thấy một cách để chia sẻ lịch sử của mình trên bash (không đơn giản như với zsh) vì vậy tôi có một dòng lệnh được duy trì. Về .screenrc, tôi nên nghĩ về nó. Thật không may, có vẻ như bạn chỉ có thể thực thi một số tập lệnh nhất định (các lệnh như 'cd' không hoạt động), nhưng điều đó sẽ ổn. Tôi không quan tâm đến các biến môi trường nếu tôi có thể khởi tạo shell bằng script.
Barthelemy

cd là một chức năng tích hợp trong trình bao của bạn, lệnh cd sẽ không có ý nghĩa gì ngoài "trình bao" :-) Nhưng bạn có thể chỉ cần bao gồm một tập lệnh chứa cd / foo / bar sau shebang. Sau đó, vỏ mới của bạn sẽ thay đổi vào thư mục này.
echox

vâng tôi hiểu sự khác biệt này, tôi chỉ nghĩ rằng các lệnh được chuyển sang shell và sau đó được thực thi trong shell. Nhưng tôi không có vấn đề gì khi viết các kịch bản khởi tạo :-) Lịch sử chia sẻ là một ý tưởng tuyệt vời btw, tôi thực sự thích nó.
Barthelemy

10

Tôi đã vấp phải một dự án gọi là phiên màn hình . Nó cho phép bạn lưu và tải lại các phiên GNU Screen ở một mức độ nào đó.


2

Có một công cụ để đóng băng trạng thái của một quá trình gọi là cryopid . Tuy nhiên, hiện tại nó không hoạt động với màn hình GNU vì nó không hỗ trợ tạo lại cấu trúc phân cấp của các quy trình phụ. Họ tuyên bố rằng họ muốn đạt được điều này trong tương lai nhưng dự án dường như không quá tích cực vào lúc này. Tuy nhiên, bạn có thể muốn theo dõi tiến trình của họ.


0

Tôi đã xây dựng một điều tương tự vào những năm trước. Thậm chí không liên quan đến màn hình; đó là phiên liên quan. "nếu $ TTY = bất cứ điều gì". echox có ý tưởng đúng.

Mẹo: nếu bạn đang thực hiện việc này trên nhiều máy, hãy nhận ra rằng mỗi máy xứng đáng được định nghĩa riêng về những gì nên làm khi bạn đăng nhập vào đó, thay vì tất cả đều giống nhau trên mỗi nfs được gắn / nhà hoặc tương tự.

HTH, -pbr

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.