Làm cách nào để kiểm tra xem tôi có đang ở phiên màn hình không?


75

bằng cách nào đó có thể kiểm tra xem tôi có ngay trong phiên màn hình không? Tôi cần nó để xác định xem việc nhấn ctrl + d sẽ ngắt kết nối tôi khỏi máy chủ hay chỉ đóng màn hình hiện tại. Cảm ơn.

Câu trả lời:


107

Bạn có thể nhìn vào $STYbiến (một biến được đặt bởi lệnh màn hình ). Nếu không phải là "" thì bạn đang ở trong một phiên màn hình.

Tôi đang ở trong màn hình

$ echo $STY 
29624.pts-1.iain-10-04
$

Tôi không ở trong màn hình

$ echo $STY

$

12
Điều này giả định rằng bạn vẫn đang trong một phiên chạy trên máy tính cục bộ. Nếu bạn khởi động màn hình và sau đó SSH ở nơi khác, điều này sẽ không hoạt động.
David Mackffy

2
if test -n "$STY"; then printf "This is a screen session named '$STY'.\n"; else printf "This is NOT a screen session.\n"; fi
tổng

2
@DavidMackffy nếu bạn SSH vào một nơi khác, nhấn ctrl-D sẽ "ngắt kết nối tôi khỏi máy chủ", đó chính xác là những gì câu hỏi hỏi về.
womble

1
@ tổng hợp1166877 Tôi có điều này nếu bạn đăng dưới dạng bí danh trong mỗi máy mà tôi sử dụng bây giờ.
Eduardo Bezerra

44

Bạn có thể nhìn vào biến $ TERM.

echo $TERM

Nếu đó là một screenphiên, biến thuật ngữ sẽ trả về "màn hình".

root@deore:/volumes# echo $TERM
screen

Ctrl-a -d (để thoát màn hình)

root@deore:/volumes# echo $TERM
xterm

Đồng thời kiểm tra: https://stackoverflow.com/questions/3472287/how-do-you-tell-if-the-civerse-terminal-session-is-in-gnu-screen


4
Điều này giả định rằng bạn không cố tình gây rối với giá trị TATE của bạn vì một số lý do.
David Mackffy

1
Nếu bạn đang thay đổi biến TATE của mình trong khi bên trong màn hình, bạn đang tự mình mời tất cả các loại rắc rối.
womble

Các nút Solaris 2.6 của tôi không hoạt động tốt với các giá trị TERM được đặt thành các giá trị màn hình.
David Mackffy

3
"$TERM" = "screen"dường như được bảo tồn khi vào sudomôi trường, không giống như $STYtùy chọn.
Melebius

29

Trừ khi bạn đã thay đổi các ràng buộc khóa mặc định, bạn có thể thực hiện Ctrl+ a-> Ctrl+ t, sẽ hiển thị thời gian, nếu bạn đang ở trong màn hình. Điều này sẽ hoạt động ngay cả khi bạn có ssh: d đi nơi khác, không giống như các đề xuất khác.


4
Tại sao chúng ta không nâng cao điều này.
AndreKR

Đây chắc chắn là giải pháp tốt nhất ở đây.
Felix Jen

2
@womble Nếu bạn đang ở trong một chương trình không xác định có thể thực hiện những việc phá hoại ngẫu nhiên như là một phản ứng với các chuỗi và lệnh chính, thì không có gì là an toàn.
Gurgeh

2
@AndreKR: Nó không hoạt động trong một kịch bản
Frank Meulenaar

1
Tôi không nâng cấp vì trong một màn hình, và sàng lọc sang một màn hình khác, và tôi thực sự cần phải xem $ STY có được thiết lập hay không. mà vì lý do nào đó nó trở lại trống rỗng.
Brian Thomas

14

Các captionlệnh trong ~/.screenrclà một cách tốt đẹp để phân biệt một phiên màn hình.

Cá nhân tôi đang sử dụng cái này:

$ cat ~/.screenrc
caption always "%{= kc}Screen session on %H (system load: %l)%-28=%{= .m}%D %d.%m.%Y %0c"

Nó thêm một dòng như thế này ở dưới cùng của màn hình:

Screen session on gbook (system load: 1,75 1,74 1,68)                   Lun 05.01.2015 13:01

Với phần đầu tiên (tên hệ thống + tải) có màu xanh lá cây và ngày có màu hồng. Hữu ích và khó bỏ lỡ!


Đây là hoàn hảo! Nó không cản trở (vị trí dưới cùng), nó luôn hiển thị (và được tô màu) và cung cấp thông tin hữu ích về hệ thống. Tôi cũng đăng bài này ở đây stackoverflow.com/a/43571028/2450431
hrvoj3e

6

Tôi đã tìm thấy một giải pháp khác:
Sửa đổi của bạn .screenrc, vì vậy phiên màn hình của tôi trông hoàn toàn khác với thiết bị đầu cuối bình thường.


Tôi nghĩ rằng tôi biết những gì bạn đang đề xuất và trong một số trường hợp có thể tránh được vấn đề này. Nó có thể hữu ích hơn nếu bạn mô tả những gì bạn muốn nói bằng cách hiển thị (ví dụ) một .screenrctệp ví dụ .
jvriesem

0
screen -ls

để xem các phiên của bạn và

screen -r sessioninfo

để kết nối lại với một người bị ngắt kết nối, nếu tách ra.

screen -D -r sessioninfo

để kết nối lại với một người bị ngắt kết nối.


1
Điều này không trả lời câu hỏi.
womble

-1

Làm a screen -ls. Nó sẽ chỉ rõ ràng Attachedso với Detachedtrạng thái.

Ví dụ đính kèm:

$ screen -ls | grep tached
3132.pts-0.esavo00      (Attached)

Ví dụ tách ra:

$ screen -ls |grep tached
3132.pts-0.esavo00  (Detached)

6
nếu có màn hình được gắn ở một nơi khác thì đây có thể là một vấn đề.
Dennis Nolte
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.