É possível em um script dizer se está sendo executado na tela do GNU?

10

Temos um longo processo de execução em um servidor remoto que é iniciado manualmente de tempos em tempos. Infelizmente, as conexões à Internet morrem, o kernels entra em pânico e vários outros desafios podem ser encontrados na sessão ssh usada para conectar e iniciar o trabalho.

A tela parece ser uma maneira perfeita de garantir que o processo não seja interrompido. No entanto, contar com uma pessoa para sempre lembrar-se de iniciar a tela e executar o script para iniciar o processo é um problema que espera acontecer. Existe uma maneira do script que eu possa verificar para ver se o script está sendo chamado na tela? Se for o processo continuará, caso contrário, o script será encerrado com uma mensagem instruindo o usuário a executar a tela primeiro.

cclark
fonte

Respostas:

11

Existe uma variável de ambiente para isso. Se estiver sendo executado dentro da tela, $TERMserá screen. É simples assim; basta fazer um se nele. Por exemplo,

if [ $TERM != 'screen' ]; then echo foo; else echo bar; fi

ecoará a barra quando estiver na tela; foo caso contrário.

Falcon Momot
fonte
2
Também pode ser screen-256colorse o usuário tiver configurado o suporte para 256 cores.
mgorven
ou screen-bce em sistemas com o byobu instalado. echo $ TERM screen-bce
nela
7

Enquanto você trabalha com tela, por que não executar o script com 'nohup'? Isso também garantirá que ele continue em execução se você for desconectado.

Ele gera um arquivo por padrão, para que você possa usar outras ferramentas para monitorar a saída do script, se desejar.

Magalhães
fonte
1
Enquanto executar com nohup atingiria o mesmo resultado de garantir que o processo continuasse em execução, eu ainda não teria o mesmo problema de alguém potencialmente esquecendo de executar o script com nohup? Ou existe uma maneira em um script para garantir que 'nohup' tenha sido usado ou preciso criar um script de wrapper que chame meu script original com nohup?
Cclark
Sim. Enquanto eu amo meus padawans (administradores de sistemas juniores) como amo meus filhos, eles frequentemente esquecem esse tipo de coisa. Então, tudo fica empacotado para que eles não precisem se lembrar de quais coisas digitar para prefixar os comandos importantes.
Magellan #