Problema ao enviar o comando para a sessão de tela desanexada

5

Eu gostaria de enviar um comando para uma sessão de tela e, se possível, obter a saída.

Minha tentativa de enviar um comando para uma sessão de tela é como encontrei neste site e em vários outros, mas parece que não funciona:

root@server [~]# screen -X "script -a -c 'ls -l' /tmp/command.log" && cat /tmp/command.log
cat: /tmp/command.log: No such file or directory
root@server [~]# 

Note que há apenas 1 sessão de tela sendo executada, então omiti -s e -p (tentei com isso também e nenhum efeito). Por exemplo:

root@server [~]# screen -p 0 -X stuff "script -a -c 'ls -l' /tmp/command.log" && cat /tmp/command.log
cat: /tmp/command.log: No such file or directory
    
por James 03.12.2012 / 00:32

1 resposta

3

Primeiro, leia envio de entrada de texto para uma tela desanexada . Você precisa de -p para direcionar a entrada para a janela da direita. Além disso, o comando não será executado até que você coloque uma nova linha (CR ou LF, o shell interativo executando a tela interna aceita ambos). Isso é:

screen -p 0 -X stuff "script -a -c 'ls -l' /tmp/command.log$(printf \r)" &&
cat /tmp/command.log

Há um segundo problema, que é o de que o comando screen -X stuff … seja concluído assim que a entrada for inserida na sessão da tela. Mas demora um pouco para executar o comando script . Quando cat /tmp/command.log é executado, é provável que script não tenha terminado; pode nem ter começado ainda.

Você precisará fazer com que o comando executado dentro de screen produza algum tipo de notificação. Por exemplo, ele pode sinalizar de volta que está concluído, supondo que o shell dentro da Tela esteja sendo executado na mesma máquina que a Tela.

sh -c '
  sleep 99999999 &
  screen -p 0 -X stuff "\
script -a -c \"ls -l\" /tmp/command.log; kill -USR1 $!
"
  wait
  cat /tmp/command.log
'
    
por 03.12.2012 / 01:12

Tags