Screen: Listar Janelas na Sessão (Não-Interativo)

1

Existe uma maneira de listar as janelas de uma sessão de tela a partir de um terminal não interativo?

screen -S 'screen_name' -X windows

De acordo com o gnu.org , este comando exibe a lista de janelas usando a linha de mensagem .

Isso é bom e elegante para um console interativo, mas eu preciso disso para imprimir na saída padrão para que eu possa lê-lo em outro programa.

Qualquer maneira de fazer isso?

SOLUÇÃO

Descobri que a melhor maneira de fazer isso é obter a lista de ids do windows usando este comando: (como postado por Stephen Harris)

screen -S 'pid.screen_name' -Q windows

Embora isso trunque os nomes das janelas quando elas são impressas, na verdade não trunca o tamanho total da saída. Então, se eu tiver 20 janelas em uma sessão de tela, essa será a saída.

> screen -S 'pid.screen_name' -Q windows
0 bash  1 bash  2 bash  3 bash  4 bash  5 bash  6 bash  7 bash  8 bash  9 bash  10 bash  11 bash  12 bash  13 bash  14 bash  15 bash  16 bash  17 bash  18 bash  19 bash  20 bash

Eu tentei isso com um número absurdo de janelas.

Com isso, você pode analisar quantas janelas existem na sessão de tela e, em seguida, emitir um comando "title" para cada um usando o seguinte comando:

screen -S 'pid.screen_name' -p %window_id% -Q title

Substitua %window_id% por cada ID de janela do comando windows .

Desta vez, o título da janela não é truncado. Portanto, o nome da tela inteira é enviado para a saída padrão.

    
por Bradley Odell 18.07.2016 / 20:12

1 resposta

1

Você pode usar a opção -Q

% screen -S 2908.pts-0.mymachine -Q windows
0- spam  1* news  6 ksh

Infelizmente, isso trunca se há mais do que encaixa na largura do terminal (basicamente faz com que o comando seja executado e exibido na linha de mensagem, mas também copia para o stdout atual).

    
por 18.07.2016 / 20:59