Como sei que estou correndo dentro de uma “tela” linux ou não?

57

A "tela" refere-se a um programa mencionado em Como se reconectar a uma sessão ssh desconectada . Essa é uma boa facilidade.

Mas há uma pergunta que eu realmente gostaria de saber. Como sei se estou correndo dentro de uma "tela"? A diferença é:

  • Se sim, sei que posso fechar com segurança a janela do terminal atual, por exemplo, fechar uma janela do PuTTY, sem perder minha sessão de shell (Bash etc).
  • Se não, sei que tenho que cuidar de qualquer trabalho pendente antes de fechar a janela do terminal.

Melhor, gostaria que esse status fosse exibido no prompt do PS1 para que eu pudesse vê-lo a qualquer momento automaticamente.

    
por Jimm Chen 06.04.2012 / 03:17

7 respostas

86

(Roubado de " Como posso saber se eu ' m em uma tela? "no StackOverflow e de autoria do usuário jho . PS Você não pode votar em uma duplicata nos sites do StackExchange.)

Verifique $STY . Se é nulo, você está em um terminal "real". Se contiver alguma coisa, é o nome da tela em que você está.

Se você não estiver na tela:

eric@dev ~ $ echo $STY
eric@dev ~ $ 

Se você estiver na tela:

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71

Se você usar o tmux em vez da tela, verifique também $TMUX . Para adicionar isso ao seu prompt, adicione o seguinte ao seu ~/.bashrc :

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi
    
por 23.05.2017 / 14:41
14

Procure $STY , que fornece detalhes que screen usa para se comunicar consigo mesmo; $WINDOW será então o número atual da janela screen .

    
por 06.04.2012 / 03:24
13

A simples verificação que costumo usar é apenas teclar Ctrl - a :

  • Se o cursor pular para o início da linha , não entrarei em sessão de tela.

  • Se nada acontecer , sei que estou dentro de uma sessão de tela e que acabei de usar a tecla de controle de tela. Em seguida, clico em a (pule para o início da linha), w (mostre as janelas de tela atuais) ou execute outro comando de tela "inofensivo" para voltar ao comando prompt.

(Claro, isso só funciona se você estiver atualmente executando o bash ou algum outro software que "pule para o início da linha" ou faça algo equivalente e inofensivo ao pressionar Ctrl-a).

    
por 06.04.2012 / 07:28
7

Bem, mais do tempo (sem as tentativas de alguém para estragar tudo) seu TERM será definido como screen (ou pelo menos mencionar screen em algum lugar).

A solução fácil para o problema é apenas executar a tela em todos os lugares. Não saia de casa sem ela, eu digo.

    
por 06.04.2012 / 03:21
7

Eu mantenho isso no meu .bashrc :

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"

Não é infalível, mas sempre que eu criar uma nova tela, ele coloca o número da janela no prompt. Se eu não estiver executando screen , não há nenhum número.

    
por 06.04.2012 / 19:01
3

Eu tenho um jeito ainda mais legal.

Adicione o seguinte ao seu ~ / .screenrc e você verá uma linha de status na parte inferior (mostrando em texto invertido a data, hora e carga do sistema. Mais códigos de escape encontrados no link man page abaixo.

    hardstatus alwayslastline
    hardstatus string '%Y-%m-%d %c | %l'

Fonte isso quando em uma sessão de tela com ctrl-a:source ~/.screenrc .

Eu tenho que agradecer a Kyle Rankin do Linux Journal por isso. Veja o artigo fantástico no link . A seção da página do manual a que ele se refere pode ser encontrada no link .

    
por 16.09.2013 / 02:56
2

você também pode reciclar a árvore de processos de $$ para ver se encontra uma ocorrência de tela. a cadeia exata provavelmente dependerá da sua configuração - na minha caixa do OS X, a tela zsh tem login como pai, SCREEN como avô e screen como bisavô.

    
por 06.04.2012 / 16:19