Como faço para que um script de shell produza o equivalente a um pressionamento de tecla?

2

Eu quero escrever um script de shell que faça o que uma macro gravada faria e reproduza as teclas pressionadas. Em particular, para produzir ctrl + a .

Isso é possível?

Eu tentei coisas como echo 41 , mas apenas diz que não há command 41 .

    
por interstar 02.07.2010 / 13:46

4 respostas

5

Você já tentou Expectar?

    
por 02.07.2010 / 14:22
3

No X11, você pode usar xdotool .

xdotool key ctrl+a
    
por 02.07.2010 / 17:00
2

Quando um aplicativo está em execução, ele muitas vezes restaura as características do terminal, de modo que pressionar ctrl-a pode realmente ser gravado como ASCII 1. Ou uma série de pressionamentos de teclas.

Em um console, ctrl-v ctrl-a produz o display ^ A e você obtém

 echo ^A | od -x
0000000 010a

onde 01 é ctrl-a.

Então, o ponto é:

, a fim de "script" algo que você tem que capturar as configurações do terminal, lembre-se deles, em seguida, redefini-los durante a reprodução. Em um script de shell, isso significa analisar a saída de

stty -a

e salvando-o em um formato que lhe permita enviá-lo de volta ao stty durante a reprodução, em seguida, envie o seu fluxo de dados para o terminal.

Isso é muito complicado por drivers de terminal, interfaces gráficas e assim por diante.

Para obter um ctrl-a "puro", use ctrl-v ctrl-a - somente no console, não necessariamente dentro de um editor.

    
por 04.07.2010 / 15:50
2

De uma página de documentação que fiz há pouco

Serge ficou muito cansado das etapas padrão do desenvolvimento da Web:

  1. Salvar arquivo
  2. Mude para o navegador (seja qual for o atalho .. normalmente alt + tab)
  3. Atualizar página
  4. Veja se a página está ok
  5. Volte para o editor

Então ele decidiu automatizar um pouco as coisas;)

Como ele melhorou a situação:

  1. Instalar o xdotool

$ sudo apt-get install xdotool

  1. Criar script xdotool
$ mkdir Documents/scripts
$ vim Documents/scripts/vim-browser-vim.sh
[...]
#!/bin/bash

# Seach for a window having "Coding" in its title and send keys to save current document in vim
xdotool search "Coding" key "Escape" "colon" "w" "Return"

# Search for a window having "Studyladder" in its title, activate it and refresh (In chrome it's Ctrl+r) 
xdotool search "Studyladder" windowactivate key "Ctrl+r"

# Seach for a window having "Coding" in its title and activate it
xdotool search "Coding" windowactivate
[...]
chmod u+x  Documents/scripts/vim-browser-vim.sh
  1. Conectar script ao atalho

No GNOME: barra de tarefas > Sistema > Preferências > Atalhos de teclado > Adicionar

Nome: vim-browser-vim Comando: /home/srivest/Documents/scripts/vim-browser-vim.sh

Em seguida, aplique.

Em seguida, atribua a tecla de atalho de sua escolha. Eu usei Ctrl + 2, eu sinto que o dedo é preguiçoso e precisa de um treino;)

Clique em Fechar.

  1. Altere o nome do seu console para "Coding" para que o script xdotool possa encontrá-lo.

Agora você pode executar o script pressionando o atalho!

Mudança de vida! hehe ..

-

Solução de problemas:

Se o script não estiver funcionando, as coisas que você precisa procurar:

  1. O xdotool está instalado
  2. O script é executável
  3. Todas as janelas estão presentes, são a barra de título correspondente à declaração de pesquisa no script. Por exemplo, no exemplo, eu pesquiso o estudioso. Se a aba do navegador não for aberta em uma página do aluno, o título no topo não mostrará o aluno e a janela não será encontrada.
  4. Muitas janelas com o mesmo nome ... para evitar. Você pode olhar para as pilhas xdotool se estiver tão ansioso.
  5. O caminho do script está correto no atalho do GNOME.

PS: NÃO TENTE GERAR ALT + TAB E OUTRAS TECLAS DE COMBINAÇÃO DE DESKTOP. Isso realmente funcionará no console, mas não quando for iniciado pelo sistema de atalhos do gnome. Estou assumindo aqui que este código de atalho lança o script em seu próprio sandbox e gerar coisas como Alt + Tab para alternar o aplicativo não funcionará, pois não há aplicativos nesse sandbox. Horas em que o desperdício tenta fazer com que isso funcione.

    
por 30.07.2011 / 04:09

Tags