Por lo general, $STY
se establecerá.
Entonces:
if [ -n "$STY" ]; then
echo "I'm most likely running under screen"
fi
$STY
normalmente 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 ssh
a otra máquina. El shell iniciado allí no tendrá $STY
en 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 $TERM
variable de entorno. Ese valor está destinado a indicar a las aplicaciones con qué tipo de terminal están hablando. Se establece screen
en algo que comienza con screen
(ya que screen
puede implementar diferentes variantes de terminales). $TERM
se 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 -X
por 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