Lógica para detectar se uma tela GNU está sendo executada

3

Para um projeto que estou desenvolvendo, gostaria de detectar se uma tela está sendo executada como o usuário atual, anexado ou desanexado. Eu gostaria de uma abordagem que use o número mínimo de processos e seja portátil em sistemas operacionais baseados em distros / unix.

Opção 1

ps -U $USER|grep screen|grep -v grep &>/dev/null && screen-yes

Isso parece bastante desordenado, mas faz o trabalho. o grep adicional era necessário para o Darwin mas não para o CentOS, existe uma maneira melhor?

Opção 2

screen -list|egrep '(There is a screen on|There are screens on)' &>/dev/null && screen-yes

Isso usa diretamente o comando screen, mas devido à saída de estilo relativamente humano, é necessário um regex grande.

Existe uma maneira melhor de fazer isso?

    
por Benjamin Goodacre 23.11.2015 / 21:29

4 respostas

2

Minha solução seria uma variação da opção 1:

ps -U $USER | grep [s]creen &>/dev/null && screen-yes

Os colchetes ao redor da primeira letra da string screen usam shell glob magic para evitar que o comando grep retorne na saída. O mesmo efeito líquido, um comando a menos grep .

    
por 23.11.2015 / 21:32
2

Você deve poder usar o código de retorno da tela. É verdade se houver telas, e falso se não houver nenhuma.

screen -list >/dev/null && screen-yes
    
por 23.11.2015 / 21:37
1
if test ! -z "$STY" 
then    
    echo "I am running in GNU Screen"
fi

É uma solução rápida que não requer programas externos.

    
por 22.10.2018 / 18:12
0
pgrep -U $USER screen &>/dev/null && screen-yes

Isso não requer nenhum processo adicional e resolve o problema com regex relativamente longo com a opção 1, usando o processo > 1 com a opção 2. Encontrei o pgrep em alguns sistemas bastante antigos, portanto ele deve ser portátil.

    
por 23.11.2015 / 22:54