Biasanya, $STYakan diatur.
Begitu:
if [ -n "$STY" ]; then
echo "I'm most likely running under screen"
fi
$STYbiasanya apa yang perlu Anda bicarakan dengan Anda screen. Itu digunakan untuk membangun jalur soket domain Unix yang digunakan untuk mengontrol screen(sesuatu seperti /var/run/screen/S-$USER/$STY.
Sekarang, itu tidak akan berfungsi misalnya jika dari layar itu, Anda sshke komputer lain. Shell mulai tidak ada $STYdi lingkungannya, dan itu tidak akan ada gunanya untuk itu, karena itu tidak akan dapat mengakses soket domain Unix pada mesin Anda.
Namun, dimungkinkan untuk menanyakan terminal dengan urutan keluar untuk menentukan jenisnya:
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
Pendekatan lain, seperti yang disarankan oleh @ val0x00ff adalah untuk memeriksa nilai $TERMvariabel lingkungan. Nilai itu dimaksudkan untuk memberi tahu aplikasi jenis terminal yang mereka ajak bicara. Ini diatur oleh screensesuatu yang dimulai dengan screen(seperti screendapat mengimplementasikan varian terminal yang berbeda). $TERMdilewatkan accross rlogin, rsh, telnet, ssh. Ini tidak dijamin untuk bekerja seperti di atas tetapi lebih sederhana dan kurang mengganggu.
case $TERM in
(screen*) echo "I'm more than likely running in screen"
esac
Seperti untuk solusi sebelumnya, Anda mungkin menjalankan screen, tetapi Anda mungkin tidak dapat mengeluarkan perintah dengan screen -Xmisalnya. Namun perhatikan, bahwa Anda dapat meneruskan perintah menggunakan urutan melarikan diri (meskipun tidak diaktifkan secara default karena alasan keamanan).