Pergunta de Expressão do Teclado Semelhante a (echo -ne '\ 015')

0

Como eu expresso ( Ctrl + a + d ) para desconectar com segurança de uma sessão screen da mesma forma que eu entraria na combinação de teclas com o meu teclado da seguinte forma:

(echo -ne '5')

Eu quero colocar essas expressões em um script de algum tipo, existe uma expressão de teclado do Linux mappy lá fora ou algo assim?

    
por firespasm 05.10.2018 / 16:54

3 respostas

1

No melhor de meu conhecimento, não há um comando que você possa executar em um shell dentro de uma sessão screen para desanexar seu terminal daquela sessão. screen está procurando apenas a entrada do seu terminal para o metacaractere mágico ( Ctrl - a ), não em nada exibido dentro da sessão de terminal gerenciado por screen próprio . Para demonstrar, criei um arquivo chamado detachsequence que contém um caractere Ctrl - a seguido por um caractere d :

$ hexdump detachsequence
0000000 01 64

Se eu cat esta dentro de uma sessão screen , nada (notável) irá acontecer; o arquivo será simplesmente exibido (não obstante o caractere de controle invisível):

$ cat detachsequence
d

Um echo ou printf seria igualmente normal.

Na verdade, seria uma falha de segurança particularmente ruim se cat de um arquivo dentro de screen pudesse enviar sequências de controle para screen .

    
por 05.10.2018 / 17:22
1

Uma solução universal poderia ser:

screen -d $STY

A tela passará o nome da sessão para a variável $STY e você poderá usar screen -d com isso.

Você provavelmente desejará executar um comando enquanto estiver desanexado, isso pode ser feito assim:

screen -d $STY & yourcommand

Observação: screen -d é suficiente por si só. Você não precisa especificar $STY .

Você também pode iniciar um script que é desanexado em primeiro lugar:

screen -d -m /the/script

Mas isso teria a ressalva de que você não terá um período de tempo no qual possa interagir com o script até que ele seja desanexado. Se você precisar disso, a solução anterior deve ser o caminho a seguir.

Outra solução (que depende do ambiente):

Se você estiver usando o script em um terminal virtual dentro de uma X seesion, poderá utilizar xdotool para enviar a sequência de controle para o terminal:

xdotool key control+a+d
    
por 05.10.2018 / 17:41
0

A tecla Ctrl-<letter> pressiona os códigos de caracteres 1 a 26 para as letras A a Z . Isto é, Ctrl-A ou ^A é envia o caractere 1, ou \x01 ou ^B1 , 5 é 2, etc. O retorno de carro é ^M ou 13 ( decimal) ou Ctrl-A d .

Então, screen1d seria screen .

No entanto, se você quiser enviar essa sequência como algo que screen interpretaria, não é tão fácil fazer isso de dentro da própria tela. (Você pode fazer isso a partir do terminal fora de screen -X detach .)

Uma maneira mais fácil de solicitar ao -S que se separe de um script é executar STY , possivelmente também usando %code% para especificar qual tela você deseja desanexar e usar a variável de ambiente %code% para encontrar a identidade de a tela atual.

    
por 05.10.2018 / 17:30