Biasanya, $STY
akan diatur.
Begitu:
if [ -n "$STY" ]; then
echo "I'm most likely running under screen"
fi
$STY
biasanya 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 ssh
ke komputer lain. Shell mulai tidak ada $STY
di 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 $TERM
variabel lingkungan. Nilai itu dimaksudkan untuk memberi tahu aplikasi jenis terminal yang mereka ajak bicara. Ini diatur oleh screen
sesuatu yang dimulai dengan screen
(seperti screen
dapat mengimplementasikan varian terminal yang berbeda). $TERM
dilewatkan 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 -X
misalnya. Namun perhatikan, bahwa Anda dapat meneruskan perintah menggunakan urutan melarikan diri (meskipun tidak diaktifkan secara default karena alasan keamanan).
Saya menggunakan tmux sendiri, dan ini sedikit untuk daftar sesi hanya jika saya belum dalam sesi tmux
sumber