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?

1ace
fonte
1
Relacionado: explicação descreen -X stuff … ; uma pergunta semelhante à sua .
Gilles 'SO- stop be evil'
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.

NJ
fonte
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.

rickumali
fonte
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.