Reabrir tela com base no título

0

Eu criei uma sessão de tela usando o comando:

screen -t name

Com base nesse nome, existe alguma maneira de reabrir esta sessão (supondo que não haja nomes duplicados)?

    
por William 24.09.2018 / 19:20

2 respostas

2

Eu não acho que haja alguma opção para isso - além de procurar na lista de processos:

screen -r $(pgrep -f '\<SCREEN.* -t name\>')

Em * BSD é necessário algo diferente:

screen -r $(pgrep -t- -f '\<screen.* -t name\>')

A opção -t- de pgrep direciona-a para corresponder apenas aos processos sem terminal de controle, neste caso apenas o processo backend screen , não a primeira exibição anexada ( screen altera a argv[0] de o processo de back-end para "SCREEN" em todos os lugares, mas no * BSD, as alterações nas cadeias argv não são espelhadas na lista de processos, como no Linux).

No FreeBSD, a opção -a ('também coincide com ancestrais do processo de chamada') também pode ser necessária. Infelizmente, pgrep -t- não é suportado no Linux e pgrep -a faz algo completamente diferente.

Então, colocando tudo em uma função:

# usage tscreen title [args ...]
tscreen(){
    title=$1; shift
    screen -r $(
      pgrep -f "\<SCREEN.* -t $title\>" ||
      pgrep -t- -f "\<screen.* -t $title\>" ||
      pgrep -at- -if "\<screen.* -t $title\>" ||
      echo "title=$title"
    ) "$@"
}
    
por 25.09.2018 / 00:07
1

Tudo o que você precisa fazer é usar o nome da sessão como um argumento na linha de comando:

screen -r SESSIONNAME

Se você tiver mais de uma tela com o mesmo nome de sessão, você também precisará especificar o PID, assim:

[jenny@sameen ~]$ screen -r test1
There are several suitable screens on:
    23669.test1 (Detached)
    23594.test1 (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
[jenny@sameen ~]$ screen -r 23669.test1

Isso é verificado na tela 4.01.00devel no RHEL7 e 4.04.00 no BSD.

    
por 29.10.2018 / 09:56