Thông thường, $STY
sẽ được thiết lập.
Vì thế:
if [ -n "$STY" ]; then
echo "I'm most likely running under screen"
fi
$STY
thường là những gì bạn cần nói chuyện với của bạn screen
. Điều đó được sử dụng để xây dựng đường dẫn của ổ cắm tên miền Unix được sử dụng để kiểm soát screen
(đại loại như thế /var/run/screen/S-$USER/$STY
.
Bây giờ, điều đó sẽ không hoạt động nếu từ màn hình đó, bạn ssh
sang một máy khác. Shell bắt đầu sẽ không có $STY
trong môi trường của nó và dù sao nó cũng sẽ không được sử dụng cho nó, vì nó sẽ không thể truy cập vào các ổ cắm tên miền Unix trên máy của bạn.
Tuy nhiên, có thể truy vấn thiết bị đầu cuối với một chuỗi thoát để xác định loại của nó:
if [ -t 1 ] && [ -t 0 ]; then
s=$(stty -g)
stty -icanon -echo min 0 time 3
printf '\033[>c'
type=$(dd count=1 2> /dev/null)
stty "$s"
case $type in
(*'>83;'*) echo "this is screen"
esac
fi
Một cách tiếp cận khác, như được đề xuất bởi @ val0x00ff là kiểm tra giá trị của $TERM
biến môi trường. Giá trị đó có nghĩa là cho các ứng dụng biết loại thiết bị đầu cuối mà họ đang nói đến. Nó được thiết lập bởi screen
một cái gì đó bắt đầu bằng screen
(như screen
có thể thực hiện các biến thể khác nhau của thiết bị đầu cuối). $TERM
được truyền accross rlogin
, rsh
, telnet
, ssh
. Nó không được đảm bảo để làm việc như trên nhưng đơn giản và ít xâm nhập hơn.
case $TERM in
(screen*) echo "I'm more than likely running in screen"
esac
Giống như đối với giải pháp trước đó, bạn có thể đang chạy screen
, nhưng bạn không thể đưa ra lệnh cho nó screen -X
. Tuy nhiên, lưu ý rằng bạn có thể truyền lệnh bằng các chuỗi thoát (mặc dù nó không được bật theo mặc định vì lý do bảo mật).