Como obter a saída dentro do `screen` para um script?


33

Eu tenho uma screeninstância em execução e precisaria executar algum código dentro do screene obter o resultado no meu script.

A primeira parte é bem fácil, eu apenas screen -S session_name -X eval 'stuff "$cmd"\015'.
(Modifiquei uma linha que encontrei em um script )

A segunda parte, obtendo a saída, é mais complicada. Como posso obter toda a saída, independentemente do tamanho?



Obrigado :) O segundo link foi explicado por que o primeiro comando deve ser stuff, e foi isso que eu tive problemas para entender.
1ace

Respostas:


29

Você pode começar screencom a -Lopção Isso fará com que a tela crie um arquivo screenlog.n(a parte n é numérica, começando com um zero) no diretório de trabalho atual.

No seu caso, isso seria algo como: screen -S session_name -L -X eval 'stuff "$cmd"\015'

Desde que você se lembre de limpar depois, isso deve corresponder ao que você procura.

Para a última linha do log, ele pode ser obtido facilmente com tail -1 screenlog.0ou o log inteiro pode ser analisado da maneira que desejar.


Uma coisa, porém: a screen. Comando que dei foi apenas para enviar o comando para iniciar o screen, eu usei screen -dmS name program;-)
1ace

22

Mais uma nuance que pode ser útil no futuro: se você estiver em uma sessão de tela, poderá solicitar interativamente a criação do arquivo de log. Pressione ctrl- a H(Control-A seguido de H maiúsculo) para solicitar que a tela comece a despejar qualquer janela em que você esteja em um arquivo de log.


5
Não sei se é por causa de uma versão mais recente, mas man screen, digamos, tenho que digitar o CA H, sem o controle somente para o H. Sad, que isso não captura o log anterior.
Matmarbon

2
Você está certo! É o CA H gerar um arquivo de log. Observe que é H maiúsculo (h minúsculo produz apenas uma cópia impressa da tela atual).
Rickumali

3
Atualize a resposta para o CA H. Pesquisadores futuros podem enganar e perder a resposta correta.
Gc5

Alguém sabe como enviar o comando através de um script? Como no controle de envio + a e depois o H após uma fração de segundo.
Zach W.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.