Invoca comandos de tela de fora da sessão

1

Como posso enviar comandos para uma sessão do GNU Screen? Se eu estivesse usando a sessão interativamente, eu digitaria uma seqüência de escape Ctrl + A .

Eu preciso enviar pressionamentos de tecla específicos para uma sessão do GNU SCREEN de outros locais (pode ser um BASH Shell Script, uma página PHP, qualquer) para manipular um programa que só funciona como uma "interface baseada em texto" (como lynx ou vim ). De vez em quando, preciso ver o que está acontecendo na SCREEN, portanto, exporto a visualização usando o comando hardcopy -h outputFile .

Eu preciso "colocar" Ctrl + A e então : em uma tela, mas ele não me deixa enviar Ctrl + A . Eu tentei isso:

$ screen -S test -p 0 -X stuff '^A:'

Mas isso só coloca dois pontos (:) na tela e ignora o ^ A.

O que eu faço atualmente (não estou trabalhando, preciso de intervenção manual para concluir a 3ª etapa):

  1. Configure a tela

    $ screen -S test

  2. Injetar comandos para a tela

    $ screen -S test -p 0 -X stuff 'python^M'
    $ screen -S test -p 0 -X stuff '42*9^M'

  3. De dentro da tela, você pode fazer Ctrl + A e então : para exibir a entrada de comando da tela. Nessa entrada, eu digito o seguinte:

    : hardcopy -h /tmp/scr-test.txt

  4. Eu posso buscar o conteúdo da tela por cat -ing o arquivo:

    $ cat /tmp/scr-test.txt

  5. Que produz:

    $ cat /tmp/scr-test.txt
    justin@justin2012:~$ python
    Python 2.7.8 (default, Oct 18 2014, 12:50:18)
    [GCC 4.9.1] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 42*9
    378
    >>>

por SsJVasto 02.12.2014 / 19:52

2 respostas

1

screen -S test -p 0 -X stuff '^A:' funciona, mas faz o que deve fazer, não o que você está tentando fazer: envia os dois caracteres ^A e : para o aplicativo em execução na janela de tela. Isso é o que o comando stuff faz: ele envia caracteres para o aplicativo em execução na janela de tela, não para a interface de tela.

O que você quer fazer é enviar um comando para a própria tela, não para o aplicativo que está sendo executado na tela. Portanto, não use o comando stuff : não é para isso que serve. O recurso que você está procurando é simplesmente screen -X … , do qual screen -X stuff … é um caso especial.

Por exemplo, para fazer a tela executar um comando hardcopy , execute

screen -S test -p 0 -X hardcopy -h outputFile 
    
por 03.12.2014 / 23:57
0

Para alcançar o que eu queria, os usuários Sukminder e lemonsqueeze forneceu 2 variâncias de uma forma de acessar o Ctrl + A + : interface, o que é ótimo.

Sukminder escreveu:

What about using eval? As in screen -S test -p 0 -X eval "hardcopy -h sample"

lemonsqueeze escreveu:

or even just screen -S test -p0 -X hardcopy out.txt

Eu testei e as duas soluções funcionam. Acho que ainda vou usar a solução Sukminder , pois permite manter o parâmetro -h .

    
por 03.12.2014 / 20:10

Tags