Por lo general, $STYse establecerá.
Entonces:
if [ -n "$STY" ]; then
  echo "I'm most likely running under screen"
fi
$STYnormalmente es lo que necesitas para hablar con tu screen. Eso se usa para construir la ruta del socket del dominio Unix que se usa para controlar screen(algo así como /var/run/screen/S-$USER/$STY.
Ahora, eso no funcionará, por ejemplo, si desde esa pantalla, usted ssha otra máquina. El shell iniciado allí no tendrá $STYen su entorno, y eso no sería de ninguna utilidad, ya que no podría acceder a los zócalos de dominio Unix en su máquina.
Sin embargo, es posible consultar el terminal con una secuencia de escape para determinar su tipo:
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
Otro enfoque, como lo sugiere @ val0x00ff es verificar el valor de la $TERMvariable de entorno. Ese valor está destinado a indicar a las aplicaciones con qué tipo de terminal están hablando. Se establece screenen algo que comienza con screen(ya que screenpuede implementar diferentes variantes de terminales). $TERMse pasa al otro lado rlogin, rsh, telnet, ssh. No es tan seguro que funcione como lo anterior, pero es más simple y menos intrusivo.
case $TERM in
  (screen*) echo "I'm more than likely running in screen"
esac
Al igual que para la solución anterior, es posible que se esté ejecutando screen, pero es posible que no pueda emitir comandos con él, screen -Xpor ejemplo. Sin embargo, tenga en cuenta que puede pasar comandos usando secuencias de escape (aunque no está habilitado de forma predeterminada por razones de seguridad).
                 
                
Yo mismo uso tmux, y este poquito para enumerar sesiones solo si aún no estoy en una sesión de tmux
fuente