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.

wlk
fonte

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

$
Iain
fonte
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

ewwhite
fonte
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.

Gurgeh
fonte
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!

Gaëtan Lehmann
fonte
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.

wlk
fonte
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.

Kevin
fonte
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)
Marcus Junius Brutus
fonte
6
se houver telas conectadas em outro lugar, isso pode ser um problema.
Dennis Nolte