Implementando um simples manipulador de eventos de teclado

Publicado por Sandro Marcell (última atualização em 18/07/2011)

[ Hits: 6.842 ]

Homepage: http://sanmarcell.wordpress.com

Download keyboard_event




Muitas vezes um usuário quer que determinada ação ocorra em seu script ao se pressionar uma única tecla, mas no shell não há nenhum tipo de manipulador que faça esse serviço. O mais próximo seria utilizando o built-in trap para capturar sinais de interrupção tais como: Ctrl+C, Ctrl+D, etc... Porém para o propósito acima ele não se adequá muito bem. Para resolver isso você pode utilizar (adaptando é claro!) este simples shell script.

  



Esconder código-fonte

#!/bin/sh
#
# Implementacao simples dum "Manipulador de eventos de teclado" em shell script.
# Autor: Sandro Marcell (smarcell)
# <smarcell@myopera.com> | <http://www.myopera.com/smarcell/blog>
# Boa Vista, Roraima - 10/05/2011.
#
PATH="/bin:/usr/bin:/usr/local/bin"

# Define a tecla que controlara a parada do evento
tecla_controle="s"
# Boas praticas de programacao =)
# - Sempre defina as variaveis antes de utiliza-las
tecla_pressionada=""

# Poe o terminal em modo especial de interpretacao de caracteres
stty -echo -icanon min 0

# O evento ocorrera dentro deste loop
while true
do
   [ "$tecla_pressionada" = "$tecla_controle" ] && break
   # Seus codigos aqui!
   echo "Pressione a tecla '$tecla_controle' para sair do loop." ; sleep 1s
   read tecla_pressionada   
done

# Restaura o modo padrao do terminal
stty sane

echo ">> Voce pressionou a tecla '$tecla_controle' e finalizou o loop!"

exit 0

Scripts recomendados

Equacao de Segundo Grau em Dialog

Pesquisa em arquivos *.odt

Extrator de CD's para MP3

Compilação do QMPlay2 no Deepin 20

Script em bash para compilação do kernel 3.3.2 para Ubuntu 11.10 com patch 3.3.0-ck1


  

Comentários
[1] Comentário enviado por julio_hoffimann em 18/07/2011 - 10:17h

Ótimo script Sandro!

Esses pequenos macetes ajudam bastante em ocasiões extraordinárias.

Abraço!

[2] Comentário enviado por uberalles em 18/07/2011 - 10:37h

Dependendo do caso, você pode até usar o /etc/inputrc. Ou mesmo o comando trap. Me ajudam bastante tbm.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts