Implementando um simples manipulador de eventos de teclado

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

[ Hits: 6.121 ]

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

Backup e restauração dos programas instalados em sistemas baseados em Debian

Carregar módulo kqemu na inicialização do sistema

telefone

Sysinfo 2.1

Encurtador de URLs pelo terminal através do Google


  

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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts