2010-08-12 24 views
13

Tôi có lệnh tôi muốn thực thi trong .bashrc chỉ khi cửa sổ hiện tại được quản lý bởi màn hình GNU. Làm thế nào để tôi làm điều này? Có một biến môi trường cho nó? Tôi đã từng cóLàm thế nào để bạn biết liệu phiên đầu cuối hiện tại có nằm trong màn hình GNU không?

 
if [ -n "$WINDOW" ]; then 
    command 
fi 

Nhưng từ những gì tôi có thể nói, $WINDOW thể hoặc không thể được xác định trên tất cả các màn hình phiên quản lý.

+0

bản sao có thể có của [Làm cách nào tôi có thể biết được mình đang ở trên màn hình?] (Http://stackoverflow.com/questions/5392618/how-can-i-tell-whether-im-in-a -screen) – LopSae

Trả lời

17

Kiểm tra cho các biến môi trường $ STY (chứa thông tin về màn hình) hoặc cho $ TERM là 'màn hình' (có thể kém tin cậy hơn).

+0

Tôi đã sử dụng các tập lệnh đình đám hàng hóa sử dụng $ TERM cho đến bây giờ. Cám ơn vì cái này! Chỉ để làm cho nó thậm chí tệ hơn, một số hộp mà các tập lệnh chạy trên có các phiên bản cũ của bash mà các điều kiện bị giới hạn (ví dụ: không có kết hợp từng phần) – Jan

4

séc $TERM, nó được thiết lập để 'screen' trong phiên màn hình .. (nhưng không phải 100% đảm bảo)

CẬP NHẬT

cách khác, bạn có thể sử dụng thực tế là trong màn hình, $TERMCAP chứa màn hình chuỗi:

[[ $TERMCAP =~ screen ]] && echo "in screen" 

cũng không phải là 100% đảm bảo

UPDATE2

nếu không phải phương pháp hoạt động, bạn có thể tìm thấy một số nguồn cảm hứng trong screen manual

+0

Màn hình dường như kế thừa giá trị $ TERM từ phiên đầu cuối khởi chạy nó. Vì vậy, trong trường hợp của tôi nó là xterm-256color và nó phụ thuộc vào môi trường. Những gì tôi muốn là giải pháp chung có thể hoạt động trong mọi môi trường. – OTZ

+0

@otz tôi sợ điều đó :) đã cập nhật một khả năng khác – mykhal

+0

Cách tiếp cận $ TERMCAP áp dụng cho nhiều trường hợp hơn, nhưng bỏ lỡ trường hợp bạn SSH đến máy chủ khác trong cùng một cửa sổ màn hình, trong trường hợp đó $ TERMCAP sẽ không chứa 'màn hình' chuỗi con. Vì vậy, khả năng áp dụng là chính xác giống như $ WINDOW, vì nó cũng mất giá trị của nó một khi bạn ssh đến máy chủ khác. Nhưng tất cả mọi thứ đều bằng nhau, vị từ $ WINDOW hoạt động nhanh hơn. – OTZ

1

Kiểm tra biến $ TERM

+0

Có thể hoặc không hoạt động, tùy thuộc vào môi trường. – OTZ

2

Tôi muốn đề xuất giải pháp thay thế luôn hiển thị và không yêu cầu kiểm tra để biết bạn đang ở trong phiên screen.

Chỉ cần thêm/chỉnh sửa một tập tin trong thư mục ~/.screenrc$HOME của bạn và thêm caption lệnh:

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

và bạn sẽ nhận được tại rất đáy một dòng mà luôn hiển thị và màu.

Screen session on host (system load: 1.50 1.40 1.30)  2017-04-23 14:06 

Xin lưu ý:

Khi bạn đang ở bên trong màn hình trên host1 và mở một phiên SSH để HOST2 và màn hình mở có mà cũng có .screenrc bạn sẽ nhận được hai dòng ở phía dưới xếp chồng lên nhau từ dưới lên (giống như một wrapper).

Điều này rất hữu ích trong trường hợp đó!

Screen session on host2 (system load: 0.01 0.03 0.05) 2017-04-23 14:14 Screen session on host1 (system load: 0.00 0.00 0.00) 2017-04-23 14:14


Thông tin thêm:

https://www.gnu.org/software/screen/manual/html_node/Caption.html

Command: caption always|splitonly [string]

https://www.gnu.org/software/screen/manual/html_node/String-Escapes.html#String-Escapes


Tôi thấy điều này nhấn here trên SO.

Các vấn đề liên quan