Como verificar se estou na sessão de tela?


75

é de alguma forma possível verificar se estou agora na sessão de tela? Preciso determinar se pressionar Ctrl + d me desconectaria do servidor ou apenas fecharia a tela atual. Obrigado.

Respostas:


107

Você pode olhar para a $STYvariável (uma variável definida pelo comando screen ). Se não for "", então você está em uma sessão de tela.

Estou na tela

$ echo $STY 
29624.pts-1.iain-10-04
$

Eu não estou na tela

$ echo $STY

$

12
Isso pressupõe que você ainda esteja em uma sessão em execução no computador local. Se você iniciar a tela e depois o SSH em outro lugar, isso não funcionará.
— 11269 David Mackintosh

2
if test -n "$STY"; then printf "This is a screen session named '$STY'.\n"; else printf "This is NOT a screen session.\n"; fi
— aggregate1166877

2
@ DavidMackintosh, se você estiver SSH em outro lugar, pressionar Ctrl-D "desconectará-me do servidor", que é exatamente o que a pergunta faz.
— womble

11
@ aggregate1166877 Tenho isso se você postou como um alias em todas as máquinas que eu uso agora.
— Eduardo Bezerra

44

Você pode olhar para a variável $ TERM.

echo $TERM

Se for uma screensessão, o termo variável deve retornar "tela".

root@deore:/volumes# echo $TERM
screen

Ctrl-a -d (para sair da tela)

root@deore:/volumes# echo $TERM
xterm

Verifique também: https://stackoverflow.com/questions/3472287/how-do-you-tell-if-the-current-terminal-session-is-in-gnu-screen


4
Isso pressupõe que você não esteja mexendo deliberadamente com o valor do TERM por algum motivo.
— David Mackintosh

11
Se você estiver alterando sua variável TERM enquanto estiver na tela, estará convidando todos os tipos de problemas para si mesmo.
— womble

Bem, meus nós do Solaris 2.6 não funcionam bem com os valores TERM configurados para os valores da tela.
— David Mackintosh

3
"$TERM" = "screen"parece preservado ao entrar no sudoambiente, ao contrário da $STYopção.
— Melebius

29

A menos que você tenha alterado as associações de teclas padrão, você pode fazer Ctrl+ a-> Ctrl+ t, que mostrará a hora, se estiver na tela. Isso funcionará mesmo se você tiver ssh: d afastado em outro lugar, ao contrário das outras sugestões.


4
Por que não estamos votando nisso?
— 21411 AndreKR #

Esta é definitivamente a melhor solução aqui.
— Felix Jen

2
@ womble Se você estiver em um programa desconhecido que pode fazer coisas destrutivas aleatórias como resposta a seqüências e comandos de chaves, nada é seguro.
— Gurgeh 12/08/16

2
@AndreKR: Não funciona em um script
— Frank Meulenaar 19/01

11
não estou votando porque em uma tela e triagem para outra tela, e eu literalmente preciso ver se $ STY está definido. que por algum motivo está voltando vazio.
— Brian Thomas

14

O captioncomando no ~/.screenrcé uma boa maneira de diferenciar uma sessão de tela.

Eu pessoalmente estou usando isso:

$ cat ~/.screenrc
caption always "%{= kc}Screen session on %H (system load: %l)%-28=%{= .m}%D %d.%m.%Y %0c"

Ele adiciona uma linha como esta na parte inferior da tela:

Screen session on gbook (system load: 1,75 1,74 1,68)                   Lun 05.01.2015 13:01

Com a primeira parte (nome do sistema + carga) em verde e a data em rosa. Útil e difícil de perder!


Isto é perfeito! Não atrapalha (posição inferior), está sempre visível (e colorido) e fornece informações úteis sobre o sistema. Eu
— publiquei

6

Encontrei outra solução:
Modifique o seu .screenrc, para que minha sessão na tela pareça completamente diferente do terminal normal.


Acho que sei o que você está sugerindo e, em algumas situações , poderia evitar esse problema completamente. Pode ser mais útil se você descrever o que quer dizer mostrando (por exemplo) um .screenrcarquivo de exemplo .
— jvriesem 29/04

0
screen -ls

para ver suas sessões e

screen -r sessioninfo

reconectar a um desconectado, se desconectado.

screen -D -r sessioninfo

reconectar a um desconectado.


11
Isso não responde à pergunta.
— Womble

-1

Faça um screen -ls. Indica explicitamente Attachedversus Detachedstatus.

Exemplo em anexo:

$ screen -ls | grep tached
3132.pts-0.esavo00      (Attached)

Exemplo desanexado:

$ screen -ls |grep tached
3132.pts-0.esavo00  (Detached)

6
se houver telas conectadas em outro lugar, isso pode ser um problema.
— Dennis Nolte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.