Thông thường, $STYsẽ được thiết lập.
Vì thế:
if [ -n "$STY" ]; then
echo "I'm most likely running under screen"
fi
$STYthườ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 sshsang một máy khác. Shell bắt đầu sẽ không có $STYtrong 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 $TERMbiế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 screenmột cái gì đó bắt đầu bằng screen(như screencó 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).