Làm sao để biết tôi đang chạy bên trong màn hình linux linux hay không?


60

"Màn hình" đề cập đến một chương trình được đề cập trong Cách kết nối lại với phiên ssh bị ngắt kết nối . Đó là một cơ sở tốt.

Nhưng có một câu hỏi tôi thực sự muốn biết. Làm thế nào để tôi biết liệu tôi đang chạy trong một "màn hình"? Sự khác biệt là:

  • Nếu có, tôi biết rằng tôi có thể đóng cửa sổ thiết bị đầu cuối hiện tại một cách an toàn, ví dụ: đóng cửa sổ PuTTY, mà không mất phiên shell (Bash, v.v.) của tôi.
  • Nếu không, tôi biết tôi phải chăm sóc bất kỳ công việc đang chờ xử lý nào trước khi tôi đóng cửa sổ thiết bị đầu cuối.

Tốt hơn, tôi muốn trạng thái này được hiển thị trong lời nhắc PS1 để tôi có thể tự động nhìn thấy nó bất cứ lúc nào.


3
Nếu bạn sử dụng tmux thay vì màn hình, bạn sẽ có một thanh trạng thái nhỏ theo mặc định. Chúng khá giống nhau cho việc sử dụng cơ bản.
Phường Samuel Edwin

9
Đặt vật tổ của bạn lên bàn và để nó quay tròn. Nếu nó tiếp tục quay, bạn ổn. Khác bạn đang ở trong một màn hình:]
Konerak

Bạn cũng có thể sử dụng byobu với màn hình và tmux. Nó có thể được thiết lập để tải tự động khi đăng nhập và sau đó nhấn phím F6 ngắt kết nối và đăng xuất.
mp3 Scratchey

Câu trả lời:


88

(Bị đánh cắp từ " Làm thế nào tôi có thể nói cho dù tôi đang ở trong một màn hình? " Trên trên StackOverflow và là tác giả của thành viên Jho PS Bạn không thể bỏ phiếu cho một bản sao trên các trang web StackExchange..)

Kiểm tra $STY. Nếu nó là null, bạn đang ở trên một thiết bị đầu cuối "thực sự". Nếu nó chứa bất cứ thứ gì, đó là tên của màn hình bạn đang ở.

Nếu bạn không ở trong màn hình:

eric@dev ~ $ echo $STY
eric@dev ~ $ 

Nếu bạn đang ở trong màn hình:

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71

Nếu bạn sử dụng tmux thay vì màn hình, hãy kiểm tra $TMUX. Để thêm phần này vào lời nhắc của bạn, hãy thêm phần sau vào ~/.bashrc:

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi

2
nếu bạn chạy một cái gì đó thông qua sudonó theo mặc định sẽ không kế thừa các biến môi trường, bao gồm $STY. Nhưng thường tuyên truyền cho môi trường sudo, vì vậy có thể kiểm tra một trong hai hoặc$TERM $STY $TERM=="screen"
rcoup

14

Tìm kiếm $STYmà cung cấp chi tiết screensử dụng để giao tiếp với chính nó; $WINDOWsau đó sẽ là screensố cửa sổ hiện tại .


13

Kiểm tra đơn giản tôi thường sử dụng là chỉ cần nhấn Ctrl- a:

  • Nếu con trỏ nhảy đến đầu dòng , tôi không ở trong phiên màn hình.

  • Nếu không có gì xảy ra , tôi biết rằng tôi đang ở trong một phiên màn hình và tôi vừa mới sử dụng phím điều khiển màn hình. Sau đó tôi nhấn a(nhảy đến đầu dòng), w(hiển thị các cửa sổ màn hình hiện tại) hoặc thực hiện một số lệnh màn hình "vô hại" khác để quay lại dấu nhắc lệnh.

(Tất nhiên, điều này chỉ hoạt động nếu bạn hiện đang thực hiện bash hoặc một số phần mềm khác "nhảy đến đầu dòng" hoặc làm điều gì đó vô hại tương đương khi nhấn Ctrl-a.)


3
Điều này chỉ hoạt động nếu khóa điều khiển màn hình của bạn được để lại ở Ctrl-a mặc định.
ShreevatsaR

1
nhấn phím điều khiển + DD sẽ tách ra và chấm dứt ssh. Bạn có thể nhấn vào sự kết hợp đó để thuận tiện hơn
akostadinov

Mặc dù câu trả lời là tốt cho câu hỏi thực tế, phương pháp này không phải là kịch bản.
Nikodemus RIP

7

Chà, hầu hết thời gian (vắng mặt ai đó cố gắng vặn vẹo mọi thứ), bạn TERMsẽ được đặt thành screen(hoặc ít nhất là đề cập đến screenmột nơi nào đó).

Giải pháp dễ dàng cho vấn đề chỉ là chạy màn hình ở mọi nơi. Đừng rời khỏi nhà mà không có nó, tôi nói.


$TERMcũng thường truyền qua sudo, đó là một lợi thế!
RCoup

7

Tôi giữ điều này trong .bashrc:

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"

Nó không phải là hoàn hảo, nhưng bất cứ khi nào tôi tạo một màn hình mới, nó sẽ đặt số cửa sổ trong dấu nhắc. Nếu tôi không chạy screen, không có số.


3

Tôi có một cách thậm chí mát mẻ hơn.

Thêm dòng sau vào ~ / .screenrc của bạn và bạn sẽ thấy một dòng trạng thái ở phía dưới (hiển thị trong văn bản đảo ngược ngày, thời gian và tải hệ thống. Thêm mã thoát trong liên kết trang man bên dưới.

    hardstatus alwayslastline
    hardstatus string '%Y-%m-%d %c | %l'

Nguồn này khi trong một phiên màn hình với ctrl-a:source ~/.screenrc.

Tôi phải cảm ơn Kyle Rankin của Tạp chí Linux vì điều này. Xem bài viết tuyệt vời của anh ấy tại http://www.linuxjournal.com/article/10950 . Phần trang người đàn ông mà anh ta đề cập có thể được tìm thấy tại http://www.gnu.org/software/screen/manual/screen.html#String-Escapes .


2

bạn cũng có thể lặp lại cây quy trình $$để xem nếu bạn tìm thấy một cá thể màn hình. chuỗi chính xác có thể sẽ phụ thuộc vào thiết lập của bạn - trên hộp OS X của tôi, một zshmàn hình bên trong có loginvai trò là cha mẹ của nó, SCREENnhư ông bà của nó và screennhư ông bà của nó.

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.