Anexar, desanexar e matar um processo na tela com um script bash

3

Eu sei que você pode executar um programa em uma tela separada , mas Gostaria de entrar em uma tela existente, matar o processo em execução no momento, reiniciá-lo e, em seguida, desanexar.

É possível fazer isso com um script bash, como posso enviar ctrl-A ctrl-D e Ctrl-C, por exemplo?

    
por user1506145 27.10.2016 / 16:19

2 respostas

1

Se você quiser remover uma tela, também poderá excluir o nome da tela em /var/run/screens/{user/ e fazer um screen -wipe .

Mas a tela tem um material e um comando paste :

  • Comando: colar [registra [destino]]

    (C-a ], C-a C-])
    
      

    Grave o conteúdo (concatenado) dos registros especificados no fluxo de stdin da janela atual. O registrador "." É tratado como o buffer de colar. Se nenhum parâmetro for especificado, o usuário será solicitado a inserir um único registro. O buffer de colar pode ser preenchido com os comandos copy, history e readbuf. Outros registros podem ser preenchidos com os comandos register, readreg e paste. Se colar é chamado com um segundo argumento, o conteúdo dos registradores especificados é colado no registro de destino nomeado em vez da janela. Se ‘.’ For usado como segundo argumento, o buffer de colar da exibição será o destino. Observe que essa pasta usa uma grande variedade de recursos: geralmente, uma janela atual e uma exibição atual são necessárias. Mas sempre que um segundo argumento é especificado, nenhuma janela atual é necessária. Quando a especificação de origem contém apenas registradores (não o buffer de colar), não é necessário que haja uma exibição atual (terminal conectado), pois os registradores são um recurso global. O buffer de colar existe uma vez para cada usuário.

  • Comando: coisas {string}

      

    Coloque a string no buffer de entrada da janela atual. É como o comando colar, mas com muito menos sobrecarga. Você não pode colar buffers grandes com o comando stuff. É mais útil para associações de teclas. Consulte Bindkey .

Então, isso funciona:

screen -S session_name -X at window_number stuff ^C
screen -S session_name -X at window_number stuff ^X

e envia um control-c e control-x respectivamente e você também pode usá-lo para combinar códigos de teclas (como control a, d)

    
por Rinzwind 27.10.2016 / 17:02
2

Se você quiser simular pressionamentos de tecla, uma linguagem de script limpa é "esperada".

Um exemplo de script esperado pode ser algo como:

spawn $env(SHELL)
match_max 100000
send -- "screen\n"
expect eol
send -- "ls\n"
send -- "^Ad"
expect eof

Isso seria executado com:

expect ./myscript
    
por user98651 27.10.2016 / 16:49